我有一个列表视图,您可以选择一个行/项目。这链接到在行上显示图像的数据触发器。只有在选择行时才会显示图像。
此部分工作正常,但是当您将焦点移动到其他内容(例如文本框)或显示消息框时,listviewitem将失去焦点,即不再显示该行上的突出显示。问题是我的形象仍然存在。当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
答案 0 :(得分:3)
我认为你很困惑IsSelected和IsFocused。
尝试将触发器绑定到IsFocused而不是IsSelected以获得所需的结果。
如果我理解正确,你只希望图像在IsSelected和IsFocused都为真时可见,否则隐藏。
执行此操作的一种方法是将默认可见性设置为可见,然后添加两个将可见性设置为隐藏的触发器:IsSelected的一个触发器= False,IsFocused的另一个触发器= False。
或相反,将默认可见性设置为隐藏,并使用IsSelected = True且IsFocused = True的MultiTrigger将其设置为可见
答案 1 :(得分:0)
@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