WPF 在触发条件下无法将 "Red" 的静态资源识别为红色画笔
WPF isn't recognize static resource of "Red" as Red brush in trigger condition
我得到了这个 TextBlock:
<TextBlock Foreground="Red"/>
还有一个带有样式触发器的 TextBlock 的隐式样式
询问“如果前景是 {StaticResource BrushTextBlockAlertForeground}
然后将背景设置为黑色。”
(当然,BrushTextBlockAlertForeground 是红色的)。
<Trigger Property="Foreground" Value="{StaticResource BrushTextBlockAlertForeground}">
<Setter Property="Background" Value="Black"/>
</Trigger>
这个触发条件不成立!
如果静态资源在加载时解析,那么为什么这个触发器会失败?
XAML 加载器不应该在触发条件下放红色吗?还是用一些表达代替?
有没有可能因为触发条件的 "Value" 属性 不是依赖 属性?
只有当我写
<Trigger Property="Foreground" Value="Red">
<Setter Property="Background" Value="Black"/>
</Trigger>
有效。
如果我从外部放置静态资源(如下所示),它在任何情况下都不起作用。像那样:
<TextBlock Foreground="{StaticResource BrushTextBlockAlertForeground}"/>
我很想知道背后的原因,因为我想写可重复使用的颜色,而不是把 "red" 放在很多地方。 "Tomorrow" 有人会尝试使其可重用,并且会遇到我遇到的行为。
确保,您测试的 TextBlock 和 StyleTrigger 使用(!)相同的笔刷红色或来自 StaticResource。具有前景红色的 TextBlock 和具有 StaticResource 的 StyleTrigger 将不起作用,反之亦然,因为值 Brushes.Red 和来自 StaticResource 的值不相等。参见
<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>
我得到了这个 TextBlock:
<TextBlock Foreground="Red"/>
还有一个带有样式触发器的 TextBlock 的隐式样式 询问“如果前景是 {StaticResource BrushTextBlockAlertForeground} 然后将背景设置为黑色。” (当然,BrushTextBlockAlertForeground 是红色的)。
<Trigger Property="Foreground" Value="{StaticResource BrushTextBlockAlertForeground}">
<Setter Property="Background" Value="Black"/>
</Trigger>
这个触发条件不成立! 如果静态资源在加载时解析,那么为什么这个触发器会失败? XAML 加载器不应该在触发条件下放红色吗?还是用一些表达代替? 有没有可能因为触发条件的 "Value" 属性 不是依赖 属性?
只有当我写
<Trigger Property="Foreground" Value="Red">
<Setter Property="Background" Value="Black"/>
</Trigger>
有效。
如果我从外部放置静态资源(如下所示),它在任何情况下都不起作用。像那样:
<TextBlock Foreground="{StaticResource BrushTextBlockAlertForeground}"/>
我很想知道背后的原因,因为我想写可重复使用的颜色,而不是把 "red" 放在很多地方。 "Tomorrow" 有人会尝试使其可重用,并且会遇到我遇到的行为。
确保,您测试的 TextBlock 和 StyleTrigger 使用(!)相同的笔刷红色或来自 StaticResource。具有前景红色的 TextBlock 和具有 StaticResource 的 StyleTrigger 将不起作用,反之亦然,因为值 Brushes.Red 和来自 StaticResource 的值不相等。参见
<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>