2010-01-27 30 views
6

Đây là XAML của tôi:WPF: Làm thế nào để thiết lập thuộc tính Foreground của một TextBlock sử dụng DataTrigger

<TextBlock Name="SeverityText" 
      Grid.Column="1" 
      Grid.Row="0" 
      Foreground="Red"> 
    <TextBlock.Triggers> 

     <DataTrigger Binding="{Binding Path=Severity}"> 
      <DataTrigger.Value> 
       <sm:Severity>Warning</sm:Severity> 
      </DataTrigger.Value> 
      <Setter TargetName="SeverityText" 
        Property="Foreground" 
        Value="Yellow" /> 
     </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Severity}"> 
      <DataTrigger.Value> 
       <sm:Severity>Information</sm:Severity> 
      </DataTrigger.Value> 
      <Setter TargetName="SeverityText" 
        Property="Foreground" 
        Value="White" /> 
     </DataTrigger> 


    </TextBlock.Triggers> 
    <TextBlock>Severity:</TextBlock> 
    <TextBlock Text="{Binding Path=Severity}" /> 
</TextBlock> 

Đây là thông báo lỗi của tôi:

Không thể tìm thấy các thành viên tĩnh 'ForegroundProperty' trên loại 'ContentPresenter'.

sm: Mức độ nghiêm trọng là điều tra tôi đã nhập.

Trả lời

10

trigger và setters của bạn cần phải được định nghĩa trong một phong cách, chứ không phải trên TextBlock trực tiếp:

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 

       <DataTrigger Binding="{Binding Severity}"> 
        <DataTrigger.Value> 
         <sm:Severity>Warning</sm:Severity> 
        </DataTrigger.Value> 
        <Setter TargetName="SeverityText" 
          Property="Foreground" 
          Value="Yellow" /> 
       </DataTrigger> 

      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

Ok, vậy trình kích hoạt bên ngoài khối kiểu là gì? –

+2

@ Jonathan Tôi đã không sử dụng chúng nhiều, nhưng tôi tin rằng Triggers trên một điều khiển trực tiếp là để kích hoạt sự kiện, như bắt các sự kiện chuột vv –

3

Viết đường dẫn đầy đủ của tài sản cũng hoạt động:
Vì vậy

tài sản = "Foreground" -> Property = "TextBlock.Foreground"

Tuy nhiên như đã đề xuất trong phần trước nswer, bạn nhận được:

System.InvalidOperationException: Thành viên bộ sưu tập kích hoạt phải thuộc loại EventTrigger.


... nếu bạn không đặt phong cách.

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