gpt4 book ai didi

c# - 具有特定触发值的通用样式

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:19 25 4
gpt4 key购买 nike

我的 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的代码隐藏功能的按钮,断点显示Tag设置为true,但文本仍然是常规的黑色。

TriggerProperty 在 InitializeComponent 之后由 View 构造函数中的函数调用设置:

public MyWindow()
{
InitializeComponent();
UpdateServerProperties();
}

public void UpdateServerProperties()
{
//other code
if(ServerValue == true)
{
TriggerProperty = true;
OnPropertyChanged("TriggerProperty");
}
}

它有点简化,但实际代码过于复杂,但结果是一样的。 ServerValue 获得一个值,我已确认 TriggerProperty 确实更新为 true。

最佳答案

Tag 属性有一个object 类型。 Xaml 无法知道 true 代表一个 bool 值,所以它只是假设您的意思是它是一个 string。假设您将 Tag 设置为 bool 值,您的 Trigger 正在评估 Equals(true, "true"),因此条件失败。

尝试使用 {x:Static} 指向某个常量 bool 值。我为这类事情保留了一个 KnownBoxes 类:

public static class KnownBoxes
{
public static readonly object True = true;
public static readonly object False = false;

// ... more common values ...
}

这些值很容易从 Xaml 中引用,例如 {x:Static ns:KnownBoxes.True}

或者,您可以使用元素语法:

<Trigger Property="Tag">
<Trigger.Value>
<s:Boolean xmlns:s="clr-namespace:System;assembly=mscorlib">True</s:Boolean>
</Trigger.Value>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="Red"/>
</Trigger>

或者您可以将 Tag 设置为字符串 "true",尽管这可能会在其他人处理您的代码时造成一些困惑:)。

关于c# - 具有特定触发值的通用样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46525436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com