3

行/アイテムを選択するリストビューがあります。これは、行に画像を表示するデータトリガーにリンクされています。画像は、行が選択されている場合にのみ表示されます。

この部分は正常に機能しますが、フォーカスをテキストボックスなどの他の場所に移動したり、メッセージボックスが表示されたりすると、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

4

2 に答える 2

3

IsSelected と IsFocused を混同していると思います。

トリガーをIsSelected ではなくIsFocusedにバインドして、目的の結果を取得してみてください。

私が正しく理解していれば、IsSelected と IsFocused の両方が true の場合にのみ画像を表示し、それ以外の場合は非表示にする必要があります。

これを行う 1 つの方法は、デフォルトの Visibility を Visible に設定してから、Visibility を Hidden に設定する 2 つのトリガーを追加することです。1 つは IsSelected = False のトリガー、もう 1 つは IsFocused = False のトリガーです。

または反対に、デフォルトの Visibility を Hidden に設定し、MultiTrigger を IsSelected = True および IsFocused = True で使用して、Visibility を Visible に設定します。

于 2009-01-21T21:28:24.137 に答える
0

@プチプチ、

情報をありがとう、これは問題をかなりうまく回避しました。以下のように、デフォルトが有効にならないように見えるため、両方のシナリオを追加する必要がありました...ただし、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 トリガーはおそらく冗長になっていると思います。

ありがとう

トラビスPUK

于 2009-01-21T23:30:15.153 に答える