【发布时间】:2017-10-02 12:26:31
【问题描述】:
我的 UserControl 中有几个 TextBlock,我想在触发属性时将其更改为粗体并具有红色字体。问题是它们中的每一个都被不同的属性改变。我看到了一个带有标签的解决方案here,但无法让它为我工作。如果这是重复的,我深表歉意,但我找不到任何解决我的问题的解决方案。
我的风格是这样的:
<Style x:Key="TextBlockTrigger" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Tag" Value="true">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
这是我尝试使用的 TextBlock:
<TextBlock Name="TextBlock1" x:Uid="TextBlock1" Text="This text should become bold and Red"
Style="{StaticResource TextBlockTrigger}" Tag="{Binding Path=TriggerProperty, UpdateSourceTrigger=PropertyChanged}"/>
我添加了一个带有读取Tag的codebehind函数的按钮,断点显示Tag设置为true,但文本仍然是常规黑色。
TriggerProperty 由 View Constructor 中的函数调用设置,在 InitializeComponent 之后:
public MyWindow()
{
InitializeComponent();
UpdateServerProperties();
}
public void UpdateServerProperties()
{
//other code
if(ServerValue == true)
{
TriggerProperty = true;
OnPropertyChanged("TriggerProperty");
}
}
这有点简化,但实际代码过于复杂,但结果相同。 ServerValue 得到一个值,我已经确认 TriggerProperty 确实更新为 true。
【问题讨论】:
-
您是否动态设置 TriggerProperty 属性?你实现 INotifyPropertyChanged 了吗?