【问题标题】:How can I trigger a control event when a ListViewItem is selected?选择 ListViewItem 时如何触发控件事件?
【发布时间】:2009-09-18 13:07:02
【问题描述】:

我有一个图像,我只想在选择 ListViewItem 时显示。我的代码不起作用,但我认为它说明了我想要完成的事情。

<GridViewColumn>
   <GridViewColumn.CellTemplate>
      <DataTemplate>
         <Image Height="20">
            <Image.Style>
               <Style TargetType="{x:Type Image}">
                  <Setter Property="Visibility" Value="Collapsed" />
                  <Style.Triggers>
                     <DataTrigger Binding="{Binding RelativeSource=
                           {
                              RelativeSource 
                              Mode=FindAncestor, 
                              AncestorType={x:Type ListViewItem}
                           }, Path=IsSelected}" Value="True">
                        <Setter Property="Visibility" Value="Visible" />
                        <Setter Property="Source" Value="/Russound.Windows;component/Resources/2leftarrow-64.png" />
                        <Setter Property="ToolTip" Value="Selected" />
                     </DataTrigger>
                  </Style.Triggers>
               </Style>
            </Image.Style>
         </Image>
      </DataTemplate>
   </GridViewColumn.CellTemplate>
</GridViewColumn>

【问题讨论】:

    标签: .net wpf .net-3.5 styles


    【解决方案1】:

    在处理绑定问题时,我通常会在“输出”窗口中搜索任何绑定错误。它们都以 System.Windows.DataError 开头。那么,输出窗口中是否有任何错误?

    【讨论】:

    • 好吧,我会说我不知道​​输出窗口中的DataError。谢谢,我修复了其他几个绑定问题,但是,这个特定问题不会引发错误。
    • 试试这个,有两个DataTrigger,一个当IsSelected为真,另一个为假。并删除该 Setter。我怀疑的是依赖属性解析总是选择设置器值,因为它比样式触发器具有更高的优先级。我以前遇到过这个问题,但我不记得确切的情况了。
    【解决方案2】:

    只需将默认可见性更改为隐藏而不是折叠。

    显然,如果您使用 Collapsed,则该元素将从可视化树中删除,并且 RelativeSource 不再起作用。

    【讨论】:

    • 改成 Hidden 是不行的 Jalfp
    • 我构建了一个示例应用程序,它使用您的代码与隐藏而不是折叠一起工作。也许我不明白你想要完成什么......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2014-02-16
    • 2017-04-10
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多