2009-05-07 26 views
8

Tôi đã có XAML sau đây được sử dụng để hiển thị thông tin chi tiết về một mục được chọn trong chế độ xem danh sách. Tôi muốn hình chữ nhật hiển thị màu thông tin chuẩn đằng sau văn bản trừ khi mục được chọn thể hiện một thông báo lỗi. Mã bên dưới không hoạt động như bình thường và luôn hiển thị màu thông tin. Nó hoạt động tuyệt vời nếu tôi không chỉ định một Fill cho phần tử gốc <Rectangle />.Làm cách nào để ghi đè thuộc tính bị ràng buộc bằng DataTrigger

<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> 

Đoạn mã không phản ánh, nhưng mã thực có một vài mức trạng thái có thể cho Mức độ nghiêm trọng nên tôi không muốn xác định trình kích hoạt cho từng mức độ nghiêm trọng có thể xảy ra. Logic tôi muốn là "Sử dụng màu thông tin trừ khi mức độ nghiêm trọng là lỗi, sau đó sử dụng màu đỏ".

Tôi chắc rằng tôi đã hiểu nhầm một số khía cạnh cơ bản của WPF nhưng dường như không thể xác định được nó. Ai đó có thể chỉ cho tôi đúng hướng để các trình kích hoạt dữ liệu tôi chỉ định sẽ ghi đè lên giá trị Fill hiện tại khi các điều kiện của họ là đúng không?

Trả lời

10

Bạn sắp hoàn tất. Thay vì chỉ định điền "mặc định" làm thuộc tính trên Hình chữ nhật của bạn, hãy chỉ định thuộc tính đó trong Kiểu:

<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> 
+0

Đúng, đã hoạt động. Mặc dù ... bạn có thể giải thích tại sao? Nó dường như với tôi rằng thuộc tính Fill trên Rectangle sẽ là tương đương. –

+0

Tôi không thể, không. Đây chỉ là từ kinh nghiệm. Tôi đoán có nó đặt trên đối tượng chính nó ghi đè bất cứ điều gì bên trong một phong cách. –

Các vấn đề liên quan