WPF的ListViewItem失去焦点事件 - 如何在活动中得到什么?
-
19-08-2019 - |
题
我有您选择行/项目列表视图。这被链接到,在该行显示图像的datatrigger。被选择的行的时候只应显示的图像。
这部分工作正常,但是当你将焦点移到别的东西,如一个文本框,或显示一个消息框,在一个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
解决方案
我想你混淆IsSelected和IsFocused。
用结合触发条件的实验来 IsFocused 一>而不是IsSelected让你期望的结果。
如果我理解正确的,你只需要在图像可见,如果IsSelected和IsFocused都是真实的,否则隐藏。
要做到这一点的一种方式是默认的可见性设定为可见,然后添加两个触发器设置可见性为隐藏:一个触发IsSelected = False,并且另一个触发IsFocused =假
或者相反,设置默认的可见性为隐藏,并使用与MultiTrigger = IsSelected True和IsFocused =真来设置它的可见性,以可见
其他提示
@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
不隶属于 StackOverflow