私はこの問題に本当にイライラしていますが、おそらくそれは本当に些細なことであり、どこに問題があるのか わかりません。状況は次のとおりです。ItemsSource にバインドされた ListView があります。タイプに応じて、DataTemplateSelector は使用するテンプレートを決定します。
コントロール(テキストボックス)をタブで移動すると、すべて正常に動作します。テキストボックスに値を入力し、テキストボックスのプロパティからタブを外すとすぐに、このプロパティの変更が呼び出されます。コントロールが更新されます。すべて正常に動作していますが、ここで問題が発生します。コントロールが更新される間、フォーカスは次のタブストップに移動せず、ListView にジャンプします。どうすればそれを無効にできますか? データが入力されておらず、プロパティの変更が発生していないように、フォーカスを移動するにはどうすればよいですか?
前もって感謝します
更新: XAML の一部です。さらに情報が必要な場合はお知らせください。
Update2: ListView で Focusable=false を設定した後、PropertyChanged が発生した場合、フォーカスが ListView コントロール全体から飛び出すようになりました
ListView 宣言:
<ListView x:Name="ListViewFields"
KeyboardNavigation.TabNavigation="Cycle"
KeyboardNavigation.IsTabStop="False"
ItemsSource="{Binding Path=Fields}"
ItemTemplateSelector="{StaticResource ControlDataTemplateSelector}"
ItemContainerStyle="{StaticResource ListViewItemStyle}"
Template="{StaticResource listViewTemplate}"
Grid.IsSharedSizeScope="true">
</ListView>
テンプレートの例:
<DataTemplate x:Key="singleLineOfTextTemplate">
<Grid Style="{StaticResource GridStyle}">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="MyFirstColumn" />
<ColumnDefinition SharedSizeGroup="MySecondColumn" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" IsTabStop="False"
Content="{Binding Path=Name}"
/>
<TextBox Grid.Column="1" x:Name="inputControl" IsTabStop="True"
Text="{Binding Path=Value, Mode=TwoWay}"
MinWidth="150"/>
</Grid>
</DataTemplate>
更新 3: ListViewItems の focus lost イベントで、フォーカスが DisconnectedItem に設定されることがあることがわかります ( SO の DisconnectedItem を参照してください。これが、この動作をする理由である可能性があります。
フォーカスを手動で復元することで、問題を解決しました。ListViewItem GotFocus および LostFocus イベントでは、選択した ListViewItem を保存し、フォーカスの復元が必要な場合はフラグを設定します。これは、ItemContainerGenerator.StatusChanged イベントで実行できます。
この解決策は私には非常に醜いようです-これを修正するための他の提案や方法はまだいいでしょう.