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>

これを試してみると、チェックボックスをチェックしない限り、タブの順序は正常に機能します。チェックボックスをチェックするとフォーカスが失われ、次のタブを押すとフォーカスがボタンに設定されます。

すべて削除すれば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 に答える