将UIElement放在ScrollViewer中,使UIElement滚动到视图中,我可以禁用它吗?

时间:2015-10-05 10:40:48

标签: .net wpf scrollviewer

是否可以在WPF框架中禁用默认ScrollViewer的这种内置行为?方案如下:

  • 我有一个放置了StackPanel的ScrollViewer。
  • 在那个StackPanel中有许多UIElement(例如TextBox控件)
  • 使用其Focus()方法聚焦其中一个TextBox控件(当前不可见)会导致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();
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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