2011-03-16 120 views
1

我畫布的背景屬性綁定到一些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

回答

4

的事情是,元素本身設置的值具有較高的「優先」當從款式,含義值設置的樣式裏面的值(包括觸發器)不能覆蓋本地設置的值。

也被設置,你需要有在同一水平上兩個值,所以只需移動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

1

您明確設置了背景屬性。現在實現您想要的最簡單的方法是將綁定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