2009-05-27 9 views
7

Dlaczego następujący kod pojawia się błąd wykonania:Jak mogę uzyskać wyzwalacz do zmiany koloru TextBlock na podstawie właściwości DataContext?

Members of the Triggers collection must be of type EventTrigger

ale element EventTrigger nie posiada właściwości wiążące.

Jak zatem zmienić kolor obiektu TextBlock na podstawie właściwości 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> 

Kod:

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

     public string Status { get; set; }  
    } 
} 

Odpowiedz

13

To dlatego, że można ustawić tylko zdarzenie wyzwala bezpośrednio na spuście właściwość ..

Użyj styl, aby osiągnąć to, co chcesz:

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

następujące obiekty mają zbiory powoduje, że może zawierać typy wyzwalania Wystawione:

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

Można to zrobić w stylu:

<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

Jest literówka, jak nie zamknąć Style.Triggers. I stwierdziłem, że potrzebuję skorzystać z właściwości TextBlock.Background. Dzięki, doprowadziłeś mnie do rozwiązania.

<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> 
Powiązane problemy