【问题标题】:WPF ListViewItem lost focus event - How to get at the event?WPF ListViewItem 失去焦点事件 - 如何参加该事件?
【发布时间】:2010-10-02 18:23:58
【问题描述】:

我有一个列表视图,您可以在其中选择一行/项目。这链接到在行上显示图像的数据触发器。只应在选择行时显示图像。

这部分工作正常,但是当您将焦点移至其他内容时,例如文本框或显示消息框,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>

问候

特拉维斯PUK

【问题讨论】:

  • 你能发布你目前的代码吗?

标签: .net wpf listview datatrigger listviewitem


【解决方案1】:

我认为您混淆了 IsSelected 和 IsFocused。

尝试将您的触发器绑定到 IsFocused 而不是 IsSelected 以获得您想要的结果。

如果我理解正确,您只希望图像在 IsSelected 和 IsFocused 都为真时可见,否则隐藏。

执行此操作的一种方法是将默认可见性设置为可见,然后添加两个将可见性设置为隐藏的触发器:一个触发器用于 IsSelected = False,另一个触发器用于 IsFocused = False。

或者相反,将默认可见性设置为隐藏,并使用 IsSelected = True 和 IsFocused = True 的 MultiTrigger 将其可见性设置为可见

【讨论】:

    【解决方案2】:

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

    谢谢

    特拉维斯PUK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      相关资源
      最近更新 更多