2009-05-27 11 views
7

Neden Aşağıdaki kod çalışma zamanı hatası alıyor.DataContext Özelliğine dayanarak bir TextBlock rengini değiştirmek için nasıl bir tetikleyici alabilirim?</p> <blockquote> <p>Members of the Triggers collection must be of type EventTrigger</p> </blockquote> <p>Ama EventTrigger eleman bir Bağlanma özelliği yok:

DataContext Özelliği'ni temel alarak TextBlock'un rengini nasıl değiştirebilirim?

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> 

Kodu:

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

     public string Status { get; set; }  
    } 
} 

cevap

13

Tetikleyici doğrudan tetikler özellik ..

Bir stil istediğini elde etmek için:

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

Bir tarzında yapabilirsiniz: yalnızca etkinlik ayarlayabilirsiniz çünkü

<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

Eğer Style.Triggers kapatmak vermedi gibi bir yazım hatası vardır:

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

aşağıdaki nesneler listelenmektedir tetik türlerini içerebilir Tetikleyiciler koleksiyonları var. Ve ben TextBlock.Background özelliğini kullanmam gerektiğini buldum. Teşekkürler, beni çözüme getirdin.

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