我的XAML:
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Column="0">
<StackPanel>
<Grid Margin="5" Background="LightGray">
<TextBlock>Grid1</TextBlock>
</Grid>
<TextBlock Margin="5">TextBlock1</TextBlock>
<CheckBox Margin="5">CheckBox1</CheckBox>
<Button Margin="5">Button1</Button>
</StackPanel>
</ScrollViewer>
<StackPanel Grid.Column="1">
<Grid Margin="5" Background="LightGray">
<TextBlock>Grid2</TextBlock>
</Grid>
<TextBlock Margin="5">TextBlock2</TextBlock>
<CheckBox Margin="5">CheckBox2</CheckBox>
<Button Margin="5">Button2</Button>
</StackPanel>
</Grid>
这给出了这个输出:
这是我的问题。如果 Button2 具有焦点,则单击 Grid2 或 TextBlock2 将不会更改焦点。但是,如果 Button1 具有焦点并单击 Grid1 或 TextBlock1 ,则焦点将从 Button1 中删除。为什么?对我而言,当您使用 ScrollViewer 围绕一个面板时,焦点逻辑会被破坏。
提前致谢。
答案 0 :(得分:2)
我可以部分回答你......
当您使用ScrollViewer
作为容器而点击某个无法控制的地方时,ScrollViewer
本身得到了ScrollViewer
,这不是ScrollViewer
。焦点,以避免IsTabStop
获得焦点,您可以停用它的属性ScrollViewer
。
我尝试了这一点,Grid
在点击没有像Textblock
或IsTabStop
这样的焦点处理的控件时没有得到焦点,但是对焦仍然表现得很奇怪,这就是为什么我之前说过“部分”。
在false
上将ScrollViewer
设为{{1}}并自行查看...
另外,你可以看看this帖子,其中一个人提出了一种实现“焦点检查器”的方法,它只是几行代码。