WPF:绑定时在DataTrigger设置画布颜色值为null

问题描述:

我画布的背景属性绑定到一些SelectedColorItem对象是这样的:WPF:绑定时在DataTrigger设置画布颜色值为null

<Canvas> 
    <Canvas.Style> 
     <Style TargetType="Canvas"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}" 
              Value="True"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Canvas.Style> 
    <Canvas.Background> 
     <SolidColorBrush Color="{Binding SelectedColorItem.MediaColor}" /> 
    </Canvas.Background> 
</Canvas> 

它的工作原理 - 它会显示所选择的颜色。 什么不起作用我写的DataTrigger表示SelectedColorItem为空。

最简单的isNullValueConverter无论是工作 - 这可能与标签进行了验证:

<Label Content="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}" /> 

它显示,当SelectedColorItem是零和否则。

有人能告诉我触发器有什么问题吗?

P.S. SelectedColorItem是ColorItemClass的一个实例,它包含一个MediaColor属性:

public System.Windows.Media.Color MediaColor {get;set;} 
+0

我认为这将是我们更容易回答,如果你提供关于你的问题多一点澄清。我的意思是,如果你将分享你的应用程序的任何示例代码。 – SharpUrBrain 2011-03-16 15:34:02

+0

我添加了与问题相关的属性的描述,但代码完全没有问题。 – Niccolo 2011-03-16 15:41:21

的事情是,元素本身设置的值具有较高的“优先”当从款式,含义值设置的样式里面的值(包括触发器)不能覆盖本地设置的值。

也被设置,你需要有在同一水平上两个值,所以只需移动Background财产的风格域:

<Canvas> 
    <Canvas.Style> 
     <Style TargetType="Canvas"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <SolidColorBrush Color="{Binding SelectedColorItem.MediaColor}" /> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}" 
              Value="True"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Canvas.Style> 
</Canvas> 
+0

谢谢你,帕夫洛。它的工作原理 – Niccolo 2011-03-16 15:47:25

您明确设置了背景属性。现在实现您想要的最简单的方法是将绑定fallbackvalue设置为Red。像:

<Canvas> 
    <Canvas.Background> 
     <SolidColorBrush Color="{Binding SelectedColorItem.MediaColor, FallbackValue=Red}" /> 
    </Canvas.Background> 
</Canvas> 

或者你也可以使用相同的datatrigger false值来设置绑定

+0

谢谢你,马库斯。您编写的代码片段以及使用其他数据触发器的建议都可行。 – Niccolo 2011-03-16 15:51:17