Как я могу получить триггер для изменения цвета TextBlock на основе свойства DataContext?
почему следующий код получает ошибку выполнения:
члены коллекции триггеров должны иметь тип EventTrigger
но элемент EventTrigger не имеет свойства привязки.
Итак, как изменить цвет TextBlock на основе свойства 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>
код:
namespace TestTriggers
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = this;
Status = "off";
}
public string Status { get; set; }
}
}
3 ответов
это потому, что вы можете установить триггеры событий только непосредственно в свойстве Trigger..
используйте стиль для достижения того, что вы хотите:
<Style x:Key="Triggers" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="off">
<Setter Property="TextBlock.Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
следующие объекты имеют коллекции триггеров, которые могут содержать перечисленные типы триггеров:
FrameworkElement Style, ControlTemplate, DataTemplate
---------------- ------------------------------------
EventTrigger EventTrigger
Trigger or MultiTrigger
DataTrigger or MultiDataTrigger
вы можете сделать это в стиле:
<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>
существует опечатка, поскольку вы не закрыли стиль.Провоцирующие факторы. И я обнаружил, что мне нужно использовать свойство TextBlock.Фон. Спасибо, ты привел меня к решению.
<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>