Silverlight ScrollViewer破坏了焦点逻辑

时间:2012-09-27 11:50:54

标签: silverlight xaml scrollviewer

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

这给出了这个输出:

UI Output

这是我的问题。如果 Button2 具有焦点,则单击 Grid2 TextBlock2 将不会更改焦点。但是,如果 Button1 具有焦点并单击 Grid1 TextBlock1 ,则焦点将从 Button1 中删除。为什么?对我而言,当您使用 ScrollViewer 围绕一个面板时,焦点逻辑会被破坏。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我可以部分回答你......

当您使用ScrollViewer作为容器而点击某个无法控制的地方时,ScrollViewer本身得到了ScrollViewer,这不是ScrollViewer。焦点,以避免IsTabStop获得焦点,您可以停用它的属性ScrollViewer

我尝试了这一点,Grid在点击没有像TextblockIsTabStop这样的焦点处理的控件时没有得到焦点,但是对焦仍然表现得很奇怪,这就是为什么我之前说过“部分”。

false上将ScrollViewer设为{{1}}并自行查看...

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