4

我看到我CheckBox的及其焦点/标签顺序的奇怪行为。

首先是一些“工作”代码:

<Grid>    
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Button Grid.Row="0" Width="100" Height="25"/>
    <TabControl Grid.Row="1" >
        <!--TabItem Header="tabItem1" Name="tabItem1"-->
        <TabItem Header="tabItem1" Name="tabItem1" FocusManager.IsFocusScope="True">
            <ScrollViewer>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>

                    <TextBox Grid.Row="0" />
                    <TextBox Grid.Row="1"/>
                    <CheckBox Grid.Row="2" Content="Test"  />
                    <TextBox Grid.Row="3"/>
                </Grid>
            </ScrollViewer>
        </TabItem>
    </TabControl>
</Grid>

如果您尝试此操作,则标签顺序可以正常工作 - 只要您不选中 CheckBox。如果我选中 CheckBox 它将失去焦点,并且下一个选项卡按下会将焦点设置为 Button。

如果我删除FocusManager.IsFocusScope="True"所有工作正常。

我的问题是这种行为是想要的还是错误的?

4

1 回答 1

4

这种行为在某种程度上是意料之中的。为了修复它,您可以在窗口上添加 GotFocus 的处理程序。

假设您的复选框名为 chkBox,如下所示:

protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
    base.OnGotKeyboardFocus(e);

     if (e.Source == chkBox)
         FocusManager.SetFocusedElement(this, chkBox); 

}

这个问题和一些类似的问题在这个 msdn 线程中有更详细的讨论。

于 2013-01-11T11:52:40.903 回答