2009-11-19 33 views

Trả lời

6

Bạn có thể sử dụng liên kết phần tử, đây là một ví dụ ngớ ngẩn: -

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="100" /> 
     <ColumnDefinition Width="100" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="60" /> 
    </Grid.RowDefinitions> 
    <ScrollViewer x:Name="ScrollSource"> 
     <StackPanel> 
      <TextBlock>Hello</TextBlock> 
      <TextBlock>World</TextBlock> 
      <TextBlock>Yasso</TextBlock> 
      <TextBlock>Kosmos</TextBlock> 
     </StackPanel> 
    </ScrollViewer> 
    <TextBox Grid.Column="1" Text="{Binding VerticalOffset, ElementName=ScrollSource}" /> 

</Grid> 

Khi ScrollViewer là cuộn văn bản tài sản của TextBox được thông báo về giá trị mới.

+0

Xin chân thành cảm ơn! Thay vì trong WPF chỉ đăng ký với sự kiện ScrollChanged, bây giờ tôi liên kết một thuộc tính phụ thuộc tùy chỉnh với VerticalOffset của trình xem cuộn và sử dụng một cuộc gọi lại cho thuộc tính phụ thuộc để có thể làm điều gì đó với các giá trị thay đổi trong mã. Ít nhất nó hoạt động: p – eriksmith200

+1

http://www.wintellect.com/CS/blogs/jlikness/archive/2010/05/18/making-the-scrollviewer-talk-in-silverlight-4.aspx –

3

Có một giải pháp dễ dàng hơn mà đặc trưng trên các diễn đàn Silverlight:

protected override Size ArrangeOverride(Size finalSize) 
{  
    // Assumes you only have one scrollviewer (e.g. fullscreen ScrollViewer) 
    var scrollbar = LayoutRoot.GetVisualDescendants() 
     .OfType<ScrollBar>() 
     .FirstOrDefault(); 

    if (scrollbar != null) 
     scrollbar.Scroll += ScrollBarScroll; 

    return base.ArrangeOverride(finalSize); 
} 

private void ScrollBarScroll(object sender, ScrollEventArgs e) 
{ 

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