4

単純な複合コントロールが埋め込まれた単純なウィンドウがあります。

(メインウィンドウ)

<Window x:Class="TabOrder.Window1"
xmlns:local="clr-namespace:TabOrder"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">First</Label>
    <TextBox TabIndex="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,0,0,0"/>

    <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0">Second</Label>
    <TextBox TabIndex="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,30,0,0"/>

    <local:MyControl Margin="0,60,0,0" VerticalAlignment="Top" HorizontalAlignment="Stretch" TabIndex="2"/>
</Grid>

(複合制御)

<UserControl x:Class="TabOrder.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">Third</Label>
    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,0,0,0"/>

    <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0">Fourth</Label>
    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,30,0,0"/>
</Grid>

フォームで予想どおり、4つのテキストボックスが表示されます...

  • 初め
  • 2番
  • 第3
  • 第4

しかし、「First」にフォーカスがあり、Tabキーを押すと、フォーカスが「Third」に切り替わります。WPFは、MyControlがTabIndex 3であり、テキストボックス「Third」がその中の最初のタブ付きコントロールであるツリーとしてではなく、単一のフラットリストとしてタブリストを認識しているようです。

これはWPFのバグですか、それともこれを行う別の方法がありますか?複合コントロールは多くのウィンドウで使用されており、1つのウィンドウで複数回使用することもできます。

4

1 に答える 1

13

私はこの応答がかなり遅いことを知っています...しかし、あなたは試しましたか:

<UserControl ... KeyboardNavigation.TabNavigation="Local">

そうすることで、UserControl がフォーカスを受け取ると、(アプリ全体で TabIndex 値の競合を心配する代わりに) UserControl 内の TabStop のみをナビゲートすることが保証されます。UserControl の TabStops をループした後、TabNavigation はその外側の TabStop に戻ります。

http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardnavigationmode.aspx

于 2011-05-13T22:55:08.633 に答える