WPF ListViewItemはフォーカスイベントを失いました-イベントで取得する方法は?
-
19-08-2019 - |
質問
行/アイテムを選択するリストビューがあります。これは、行に画像を表示するデータトリガーにリンクされています。画像は、行が選択されている場合にのみ表示されます。
この部分は正常に機能しますが、テキストボックスなどの別の場所にフォーカスを移動するか、メッセージボックスが表示されると、listviewitemはフォーカスを失います。つまり、行のハイライトは表示されなくなります。問題は、私の画像がまだ残っていることです。リストビューがフォーカスを失うと、非表示/折りたたみになるはずです...リストビューで別のアイテム/行を選択すると、正常に動作します。
これについて誰か助けてもらえますか?
<Style x:Key="deleteImageStyle" TargetType="{x:Type Image}">
<Setter Property="Source" Value="Resources/iconDelete.png" />
<Setter Property="Margin" Value="0,2,5,0" />
<Setter Property="Height" Value="16" />
<Setter Property="Width" Value="16" />
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="Cursor" Value="Hand" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Hidden" />
</Trigger>
</Style.Triggers>
</Style>
よろしく
TravisPUK
解決
IsSelectedとIsFocusedを混同していると思います。
IsFocusedにトリガーをバインドする実験a> IsSelectedの代わりに、目的の結果を取得します。
正しく理解している場合、IsSelectedとIsFocusedの両方がtrueの場合にのみ画像を表示し、それ以外の場合は非表示にします。
これを行う1つの方法は、デフォルトのVisibilityをVisibleに設定し、VisibilityをHiddenに設定する2つのトリガーを追加することです。IsSelected= FalseのトリガーとIsFocused = Falseのトリガーです。
またはその逆、デフォルトの可視性を非表示に設定し、IsSelected = TrueおよびIsFocused = TrueでMultiTriggerを使用して可視性をVisibleに設定します
他のヒント
@Bubblewrap、
情報をありがとう、これは問題をかなりうまく回避しました。以下のように、デフォルトが有効にならないように両方のシナリオに追加する必要がありました...しかし、MultiTriggerメソッドはまだ試していません。後で行います。
これが最終的に私が結んだものです。
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsFocused}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsFocused}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Hidden" />
</Trigger>
</Style.Triggers>
ご協力いただきありがとうございます。これで問題を解決できます。ただし、IsEnabledトリガーはおそらく冗長になっていると思います。
ありがとう
TravisPUK