8

次のコードでランタイムエラーが発生するのはなぜですか。

Triggersコレクションのメンバーは、EventTriggerタイプである必要があります

ただし、EventTrigger要素にはBindingプロパティがありません。

では、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; }    
    }
}
4

3 に答える 3

13

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

<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>
于 2009-05-27T09:29:31.917 に答える
13

これは、トリガープロパティで直接イベントトリガーを設定することしかできないためです。

あなたが望むものを達成するためにスタイルを使用してください:

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

次のオブジェクトには、リストされているトリガータイプを含むことができるTriggersコレクションがあります。

FrameworkElement     Style, ControlTemplate, DataTemplate
----------------     ------------------------------------
EventTrigger         EventTrigger
                     Trigger or MultiTrigger
                     DataTrigger or MultiDataTrigger
于 2009-05-27T09:30:13.117 に答える
1

Style.Triggers を閉じていないため、タイプミスがあります。そして、プロパティ 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>
于 2011-07-22T16:13:42.113 に答える