2009-05-27 1 views
7

はなぜ次のコードは、実行時エラーが出るん:DataContextプロパティに基づいてTextBlockの色を変更するトリガを取得するにはどうすればよいですか?

Members of the Triggers collection must be of type EventTrigger

をしかしEventTrigger要素が結合性を持っていません。

DataContextプロパティに基づいてTextBlockの色を変更するにはどうすればよいですか?

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> 

コード:

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

     public string Status { get; set; }  
    } 
} 

答えて

13

プロパティ..

使用スタイルは、あなたが望むものを達成するために:

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

あなたのスタイルでそれを行うことができます。

だけ設定できるため、イベントがトリガーに直接トリガされ
<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

あなたがStyle.Triggersを閉じていなかったとして、タイプミスがあります:

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

次のオブジェクトがリストされているトリガタイプを含めることができますトリガのコレクションを持っています。そして、TextBlock.Backgroundプロパティを使用する必要があることがわかりました。ありがとう、あなたは私を解決に導いた。

<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> 
関連する問題