WPF не распознает статический ресурс Red в виде красной кисти в состоянии триггера
Я получил этот TextBlock:
<TextBlock Foreground="Red"/>
И есть неявный стиль для TextBlock с триггером стиля, который спрашивает, "если передний план равен {StaticResource BrushTextBlockAlertForeground}, тогда установите фон в черный цвет". (BrushTextBlockAlertForeground, конечно, красный).
<Trigger Property="Foreground" Value="{StaticResource BrushTextBlockAlertForeground}">
<Setter Property="Background" Value="Black"/>
</Trigger>
Это условие триггера не выполняется! Если статический ресурс разрешен при загрузке, то почему этот триггер не работает? Разве загрузчик XAML не должен помещать красный в состояние триггера? или вместо этого ставится какое-то выражение? Есть ли вероятность того, что это произойдет, потому что свойство "Значение" условия триггера не является свойством зависимости?
Только когда я пишу
<Trigger Property="Foreground" Value="Red">
<Setter Property="Background" Value="Black"/>
</Trigger>
Оно работает.
Если я добавлю статический ресурс извне (смотри ниже), он ни в коем случае не будет работать. Как это:
<TextBlock Foreground="{StaticResource BrushTextBlockAlertForeground}"/>
Я хотел бы знать причину, потому что я хочу написать многоразовый цвет вместо того, чтобы помещать "красный" во многих местах."Завтра" кто-то попытается сделать это многоразовым и столкнется с поведением, которое я испытываю.
1 ответ
Убедитесь, что тестируемые TextBlocks и StyleTrigger используют (!) Одну и ту же кисть Red или из StaticResource. TextBlock с красным цветом переднего плана и StyleTrigger с StaticResource и наоборот не будут работать, поскольку значения Brushes.Red и StaticResource не равны. См. A: Как сравнить SolidColorBrushes?
<StackPanel>
<!--this doesn't work-->
<StackPanel.Resources>
<SolidColorBrush x:Key="forebr" Color="Red"/>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Foreground" Value="{StaticResource forebr}">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<TextBlock Foreground="Red" Text=" Test trigger 0"></TextBlock>
</StackPanel>
<StackPanel>
<!--this doesn't work-->
<StackPanel.Resources>
<SolidColorBrush x:Key="forebr" Color="Red"/>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Foreground" Value="Red">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<TextBlock Foreground="{StaticResource forebr}" Text=" Test trigger 1"></TextBlock>
</StackPanel>
<StackPanel>
<!--this works-->
<StackPanel.Resources>
<SolidColorBrush x:Key="forebr" Color="Red"/>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Foreground" Value="{StaticResource forebr}">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<TextBlock Foreground="{StaticResource forebr}" Text=" Test trigger 2"></TextBlock>
</StackPanel>
<StackPanel>
<!--this works-->
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Foreground" Value="Red">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<TextBlock Foreground="Red" Text=" Test trigger 3"></TextBlock>
</StackPanel>