0

ObservableCollection をバインドして提示する ListView がありますが、選択した DataTemplate の UserControls のいずれかで TextBox を選択した場合、ListView で正しい項目を選択することを除きます。私の DataTemplate は、ObservableCollection のタイプに基づいてビューを選択します。現在、タイプは TimeDelay:ModelBase または AddPoint:ModelBase のみです。

ListTimeDelayView または ListAddPointView のいずれかの ListView で TextBox を除いて任意の領域を選択すると、選択は問題ありません。ただし、TextBox が選択されている場合、ListView の選択は移動しません。画像を参照してください。青色の選択は、Move ddddd まで下に移動する必要があります。

<UserControl.Resources>
    <DataTemplate DataType="{x:Type model:TimeDelay}">
        <local:ListTimeDelayView />
    </DataTemplate>

    <DataTemplate DataType="{x:Type model:AddPoint}">
        <local:ListAddPointView />
    </DataTemplate>
</UserControl.Resources>

リストビュー

<ListView ItemsSource="{Binding UserControlOneStatic.MotionSequenceCollection, Mode=TwoWay}"
     SelectedIndex="{Binding MotionSequenceStatic.MotionListViewSelected, Mode=TwoWay}"/>

下の画像

ここに画像の説明を入力

4

1 に答える 1

1

WPF 入力イベントでは、要素ツリーがバブルアップします。を処理GotKeyboardFocusしてListView元の要素を取得でき、それはDataContext.

void myListView_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        var element = e.NewFocus as FrameworkElement;
        myListView.SelectedItem = element.DataContext;
    }

それが基本的な考え方です。これは、ItemsControls、IMO のデフォルトの動作である必要があります。

編集: Chris は、XAML スタイルとトリガーを使用して、よりシンプルで正しいソリューションにリンクしました。

于 2013-11-03T22:28:42.783 に答える