Dot-Net

如何使用 DataTrigger 覆蓋綁定屬性

  • May 4, 2011

我有以下 XAML 用於顯示有關在列表視圖中選擇的項目的詳細資訊。我希望矩形在文本後面顯示標准資訊顏色,除非所選項目表示錯誤消息。下面的程式碼不能按原樣工作,總是顯示資訊顏色。如果我不Fill為根<Rectangle />元素指定 a ,它會很好用。

<Rectangle Fill="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" 
          RadiusX="4" RadiusY="4">
 <Rectangle.Style>
   <Style TargetType="{x:Type Rectangle}">
     <Style.Triggers>
       <DataTrigger Binding="{Binding Path=CurrentMessage.Severity"  
                    Value="Error" >
         <Setter Property="Fill" Value="#20FF0000" />
       </DataTrigger>
     </Style.Triggers>
   </Style>
 </Rectangle.Style>
</Rectangle>

該片段沒有反映它,但實際程式碼具有相當多的嚴重性狀態級別,因此我不想為每個可能的嚴重性定義觸發器。我想要的邏輯是“使用資訊顏色,除非嚴重性是錯誤,然後使用紅色”。

我確定我誤解了 WPF 的一些基本方面,但似乎無法確定它。有人可以指出我正確的方向,以便我指定的數據觸發器在條件為真時覆蓋現有的 Fill 值嗎?

您快到了。不要將“預設”填充指定為矩形的屬性,而是在樣式中指定它:

<Rectangle RadiusX="4" RadiusY="4">
 <Rectangle.Style>
   <Style TargetType="{x:Type Rectangle}">
     <Setter Property="Fill" 
             Value="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" />
     <Style.Triggers>
       <DataTrigger Binding="{Binding Path=CurrentMessage.Severity"  
                    Value="Error" >
         <Setter Property="Fill" Value="#20FF0000" />
       </DataTrigger>
     </Style.Triggers>
   </Style>
 </Rectangle.Style>
</Rectangle>

引用自:https://stackoverflow.com/questions/833158