2015-10-05 31 views
0

是否可以在WPF框架中禁用默认ScrollViewer的内置行为?该场景如下:聚焦放置在ScrollViewer中的UIElement,导致UIElement滚动到视图中,我可以禁用它吗?

  • 我有一个ScrollViewer与放置在其中的StackPanel。
  • 在那个StackPanel中有许多UIElement(例如TextBox控件)
  • 使用Focus()方法将其中一个TextBox控件(当前不可见)聚焦到视图中它可见。

我想禁用此行为,但我不知道如何处理此问题。我是否需要编写自己的ScrollViewer控件,或者有一个附加的属性,我不知道禁用了这个“ScrollIntoView”逻辑。以下是该场景的一些代码片段:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <StackPanel> 
     <Button Content="Focus Item 6" Margin="10" Click="Button_Click"/> 
     <TextBox Text="Lost focus" Margin="10"/> 
    </StackPanel> 
    <ScrollViewer Grid.Row="1"> 
     <StackPanel> 
      <TextBox Text="Item 1" Height="100" x:Name="Item1"/> 
      <TextBox Text="Item 2" Height="100" x:Name="Item2"/> 
      <TextBox Text="Item 3" Height="100" x:Name="Item3"/> 
      <TextBox Text="Item 4" Height="100" x:Name="Item4"/> 
      <TextBox Text="Item 5" Height="100" x:Name="Item5"/> 
      <TextBox Text="Item 6" Height="100" x:Name="Item6"/> 
     </StackPanel> 
    </ScrollViewer> 
</Grid> 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.Item6.Focus(); 
} 

感谢您的帮助。

回答

0

通过互联网深入搜索后,我发现this answer。感谢AndrewS在该主题中的回答。基本上我所要做的就是处理ScrollViewer控件中Panel的RequestBringIntoView事件,或者在我的示例中处理StackPanel

相关问题