使用FocusManager.IsFocusScope =“True”,复选框失去焦点

时间:2013-01-11 09:35:49

标签: wpf checkbox focus

我看到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,Tab键顺序就可以正常工作。如果我检查CheckBox它会失去焦点,下一个标签按下会将焦点设置为按钮。

如果我删除FocusManager.IsFocusScope="True",一切正常。

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

1 个答案:

答案 0 :(得分:4)

这种行为是以某种方式预期的。为了修复它,您可以在窗口上添加GotFocus的处理程序。

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

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

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

}

this msdn thread

中更详细地讨论了这个问题和一些类似的问题