2009-05-27 16 views
7

Tại sao đoạn mã sau nhận được lỗi runtime:Làm cách nào để có được trình kích hoạt để thay đổi màu của một TextBlock dựa trên một thuộc tính DataContext?

Members of the Triggers collection must be of type EventTrigger

Nhưng các yếu tố EventTrigger không có một tài sản Binding.

Vậy làm cách nào để thay đổi màu của TextBlock dựa trên Thuộc tính DataContext?

XAML:

<Window x:Class="TestTrigger123345.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel HorizontalAlignment="Left"> 
     <TextBlock Text="{Binding Status}"> 
      <TextBlock.Triggers> 
       <DataTrigger Binding="{Binding Status}" Value="off"> 
        <Setter Property="TextBlock.Background" Value="Red"/> 
       </DataTrigger> 
      </TextBlock.Triggers> 
     </TextBlock> 
    </StackPanel> 
</Window> 

Code:

namespace TestTriggers 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      DataContext = this; 
      Status = "off"; 
     } 

     public string Status { get; set; }  
    } 
} 

Trả lời

13

Đó là bởi vì bạn chỉ có thể đặt sự kiện gây nên trực tiếp trên Trigger tài sản ..

Sử dụng một phong cách để đạt được những gì bạn muốn:

<Style x:Key="Triggers" TargetType="TextBlock"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Status}" Value="off"> 
      <Setter Property="TextBlock.Background" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Đối tượng sau đây có bộ sưu tập Triggers có thể chứa các loại cò niêm yết:

FrameworkElement  Style, ControlTemplate, DataTemplate 
----------------  ------------------------------------ 
EventTrigger   EventTrigger 
        Trigger or MultiTrigger 
        DataTrigger or MultiDataTrigger 
9

Bạn có thể làm điều đó trong một phong cách:

<TextBlock Text="{Binding Status}"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Status}" Value="off"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
2

Có một lỗi đánh máy là bạn không đóng Style.Triggers. Và tôi thấy tôi cần sử dụng thuộc tính TextBlock.Background. Cảm ơn, bạn đã cho tôi giải pháp.

<TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Status}" Value="off"> 
        <Setter Property="TextBlock.Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
Các vấn đề liên quan