2012-10-31 43 views
18

Được rồi, vì vậy, mọi người đều biết cách đặt vị trí cuộn của một ScrollViewer. Toàn bộ các bài tiểu luận và bài viết trên blog đã được viết về ScrollViewer.ScrollToVerticalOffset() và có một vài câu hỏi hay có câu trả lời về nó ở đây.C#/WPF - Lấy vị trí cuộn ScrollViewer?

Vì vậy, tôi nhập:

myScrollViewer.ScrollToVerticalOffset(280); 

... và nó cuộn rất tử tế với vị trí đó.

Câu hỏi là, tài sản nào hiện có chứa 280, vì vậy tôi có thể truy xuất lại sau?

(Gợi ý: myScrollViewer.VerticalOffsetContentVerticalOffset đều 0; myScrollViewer.ScrollInfo chỉ đơn giản không tồn tại.)

EDIT: Rõ ràng tôi cần một cuộc biểu chi tiết hơn.

private void btnTest_Click(object sender, RoutedEventArgs e) { 
    double scrollTarget = 280; 
    MessageBox.Show("Target: " + scrollTarget.ToString()); 
    myScrollViewer.ScrollToVerticalOffset(scrollTarget); 
    MessageBox.Show("Now: " + myScrollViewer.VerticalOffset); 
} 

Tôi phải nhắc lại rằng này không di chuyển như dự định. Đi đúng chính xác nơi tôi muốn. Nhưng, myScrollViewer.VerticalOffset được đặt tại 0.

+0

Đọc MSDN, 'VerticalOffset' hoặc' ContentVerticalOffset' sẽ cung cấp cho bạn giá trị chính xác ... tại thời điểm nào bạn truy cập các thuộc tính này (khi chúng đánh giá là 0)? –

Trả lời

23

Giải pháp là gọi thủ công myScrollViewer.UpdateLayout() sau myScrollViewer.ScrollToVerticalOffset(). Sau đó, myScrollViewer.VerticalOffset sẽ có giá trị mong đợi.

4

Đảm bảo VerticalScrollBarVisibility = "Visible" và VerticalScrollOffset của bạn sẽ là 280 sau khi sự kiện LayoutUpdated đã được kích hoạt.

0

Tôi nghĩ bạn đang gọi myscrollViewer trong hàm tạo của cửa sổ.

Bạn có thể gọi cho họ khi bạn nhấp vào một nút hoặc trong phương pháp được tải cho cửa sổ, để giá trị được cập nhật theo giá trị bù dọc. Đó là, những giá trị này được cập nhật sau khi bạn khởi tạo cửa sổ của mình!

Các vấn đề liên quan