1

私はこの問題に本当にイライラしていますが、おそらくそれは本当に些細なことであり、どこに問題があるのか​​ わかりません。状況は次のとおりです。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 イベントで実行できます。

この解決策は私には非常に醜いようです-これを修正するための他の提案や方法はまだいいでしょう.

4

0 に答える 0