WPF ListViewItem失去焦点事件 - 如何获得该事件?

3
我有一个列表视图,在此上选择一行/项目。这与数据触发器相关联,以在该行上显示图像。只有在选择该行时才应显示图像。
这部分功能很好,但是当您将焦点移动到其他位置,例如文本框或消息框时,listviewitem失去焦点,即不再显示行上的高亮。问题在于我的图片仍然存在。当listview失去焦点时,它应该被隐藏/折叠……如果您在listview上选择不同的项/行,则它可以正常运行。
请问有人可以帮忙解决吗?
<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


你能发布一下你目前的代码吗? - Kent Boogaart
2个回答

3
我认为您混淆了IsSelected和IsFocused。
尝试将触发器绑定到IsFocused而不是IsSelected,以获得所需的结果。
如果我理解正确,您只想在IsSelected和IsFocused都为true时才显示图像,否则隐藏。
一种方法是将默认可见性设置为Visible,然后添加两个触发器将可见性设置为Hidden:一个触发器用于IsSelected = False,另一个用于IsFocused = False。
或者相反,将默认可见性设置为Hidden,并使用MultiTrigger使IsSelected = True且IsFocused = True时将其可见性设置为Visible。

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触发器现在可能是多余的。

谢谢

TravisPUK


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接