0

我的 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具有焦点,单击Grid2TextBlock2将不会改变焦点。但是,如果Button1具有焦点并单击Grid1TextBlock1,则焦点将从Button1中移除。为什么?对我来说,当你用ScrollViewer包围面板时,焦点逻辑似乎被破坏了。

提前致谢。

4

1 回答 1

2

我可以部分回答你...

这不是ScrollViewer打破焦点,当您使用 aScrollViewer作为容器并单击某个没有控件能够获得焦点的地方时,ScrollViewer它本身就会获得焦点,因此为了避免获得焦点,ScrollViewer您可以禁用IsTabStop它的属性。

我试过这个,当你点击一个没有像orScrollViewer那样的焦点处理的控件时没有获得焦点,但是焦点仍然表现得很奇怪,这就是我之前说“部分”的原因。GridTextblock

设置IsTabStopfalse打开ScrollViewer并亲自查看...

另外,你可以看看这篇文章,其中一个人提出了一种实现“焦点检查器”的方法,它只是几行代码。

于 2012-11-09T14:22:14.980 回答