【问题标题】:MultiTrigger: Combined DataTrigger and PropertyTrigger not workingMultiTrigger:组合的 DataTrigger 和 PropertyTrigger 不起作用
【发布时间】:2012-03-19 19:49:12
【问题描述】:

我有一个问题,我需要将DataTriggerPropertyTrigger 组合成MultiDataTrigger 以在GridViewColumn 中显示Image(结合TreeView,这是一个自定义控件我正在使用)。我在互联网上尝试并搜索了一些东西,这就是我已经走了多远:

 <Image Width="16" 
        Height="16" 
        Stretch="UniformToFill">
           <Image.Style>
              <Style TargetType="{x:Type Image}">
                  <Setter Property="Source" 
                          Value="{Binding ScorecardNiveau, Converter={StaticResource ScorecardNiveauToImageConverter}}" />
                     <Style.Triggers>
                       <MultiDataTrigger>
                          <MultiDataTrigger.Conditions>
                             <Condition Binding="{Binding WpfSettings.IsExpanded}" Value="True" />
                             <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Source}" Value="/folder_closed.png" />
                          </MultiDataTrigger.Conditions>
                          <Setter Property="Source" Value="/folder_open.png" />
                        </MultiDataTrigger>
                     </Style.Triggers>
            </Image.Style>
  </Image>

现在,根据Converter,最初,Image 可以有两个图像。 folder_open 或另一个(现在不重要)。现在我想要的是:当 TreeViewNode 展开 (WpfSetting.IsExpanded = true) 并且图像源为 folder_close 时,我希望图像获取 folder_open 图像。我想我很接近上面的代码,但它并没有真正起作用。当我打开 TreeViewNode 时,Image 根本没有改变。

我认为我在 RelativeSource=Self 上的条件有问题,但我不确定。

谁能帮帮我?提前致谢。

当然,如果需要,可以提供更多信息/代码。

【问题讨论】:

    标签: wpf image datatrigger multidatatrigger multitrigger


    【解决方案1】:

    问题不在于 RelativeSource=Self,而是当您尝试将 Source(ImageSource 类型)与字符串值(“/folder_closed.png”)进行比较时,它返回 false

    尝试以下条件:

    <Condition Binding="{Binding ScorecardNiveau, Converter={StaticResource ScorecardNiveauToImageConverter}}" Value="/folder_closed.png" />
    

    【讨论】:

    • 我试过了,还是不行,虽然比较转换器的返回值很有意义。
    • 我认为问题出在 WpfSettings.IsExpanded 属性上。当我使用 MultiValueConverter 对其进行调试时,IsExpanded 属性的值是“UnsetDependencyProperty”,在调用触发器时可能相同。
    • 是的。我尝试了一个类似的测试代码,其中 IsExpanded 为真/假,它按预期工作
    • 好的,那我需要找到另一个解决方案。谢谢!将标记为已回答,因为给出的解决方案应该回答问题:)
    猜你喜欢
    • 2012-07-11
    • 2015-02-21
    • 2014-10-24
    • 2012-04-17
    • 2021-11-14
    • 1970-01-01
    • 2021-08-07
    • 2013-09-24
    • 2019-11-10
    相关资源
    最近更新 更多