wpf - 在 Setter 中覆盖 Text 属性(或更好的方法)

标签 wpf xaml setter textblock datatrigger

我正在努力在 WPF XAML 中复制switch,我想在其中分层地遍历一些绑定(bind)并将我的 Text 属性设置为我获得的最后一个真实值。

<TextBlock Grid.Row="4" Grid.Column="2">
  <Run Text="No hits"/>
  <TextBlock.Style>
    <Style>
      <Style.Triggers>
        <DataTrigger Binding="{Binding FirstValue}" Value="True">
          <Setter Property="TextBlock.Text" Value="FirstValueHit"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding SecondValue}" Value="True">
          <Setter Property="TextBlock.Text" Value="SecondValueHit"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding ThirdValue}" Value="True">
          <Setter Property="TextBlock.Text" Value="ThirdValueHit"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </TextBlock.Style>
</TextBlock>

我的问题是,如果 3 个都命中,我最终会得到字符串“No attempts FirstValueHit SecondValueHit ThirdValueHit”。

是否有一种简单的方法可以使其覆盖之前的 TextBlock.Text 属性,就像我要更改前景色一样。

如果我有 Foreground="Red" 然后在 setter 上将其设置为黄色,我会得到黄色前景,而不是橙色前景(红色加黄色)。

或者有没有更好的方法让它像一个开关一样工作,只需翻转顺序并在命中时中断?

最佳答案

TextBlock.Text 有点特殊,因为它只是处理 TextBlock.Inlines 的便捷方法。这就是为什么您会看到组合的 No attempts FirstValueHit SecondValueHit ThirdValueHit 的伪像。但是,只要您不想处理多个 Run 元素,就可以像任何其他属性一样处理它。

基本上,在样式中设置属性,而不是直接在控件中设置。否则本地值将覆盖样式触发结果。另外,设置 Style.TargetType 以便直接访问目标类型属性。

<TextBlock Grid.Row="4" Grid.Column="2">
  <TextBlock.Style>
    <Style TargetType="TextBlock">
      <Setter Property="Text" Value="No hits"/>
      <Style.Triggers>
        <DataTrigger Binding="{Binding FirstValue}" Value="True">
          <Setter Property="Text" Value="FirstValueHit"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding SecondValue}" Value="True">
          <Setter Property="Text" Value="SecondValueHit"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding ThirdValue}" Value="True">
          <Setter Property="Text" Value="ThirdValueHit"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </TextBlock.Style>
</TextBlock>

关于wpf - 在 Setter 中覆盖 Text 属性(或更好的方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431875/

相关文章:

c# - 如何在 C#/WPF 中生成本地化的键盘快捷键?

.net - Star sizing 表现得像 Auto?

c# - WPF MVVM TreeView 使用 HierarchicalDataTemplate 不更新

java - 在构造函数中从另一个类设置值

java - 自JavaFX设置程序/获取程序是最终的最佳实践?

c# - 如何从其他 View 模型调用主视图模型中的函数?

WPF 工具提示 ControlTemplate 不显示内容

wpf - 如何在WPF Grid中设置行边框和背景颜色

c# - 隐藏项目时,如何动态地将剩余的堆栈面板元素垂直居中?

java - 如何 stub 获取/设置简单类型