2009-11-19 11 views

Antwort

6

Sie Element verwenden können, verbindlich, hier ist ein Daft Beispiel: -

<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> 

Als ScrollViewer ist die Text-Eigenschaft des TextBox gescrollt wird von dem neuen Wert beraten.

+0

Danke für den Tipp! Anstatt in WPF nur das ScrollChanged-Ereignis zu abonnieren, binde ich jetzt eine benutzerdefinierte Abhängigkeitseigenschaft an das VerticalOffset des Scrollviewers und verwende einen Callback für die Abhängigkeitseigenschaft, um etwas mit den geänderten Werten im Code ausführen zu können. Zumindest funktioniert es: p – eriksmith200

+1

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

3

Es gibt eine einfachere Lösung, die auf den Silverlight-Foren vorgestellt:

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) 
{ 

}