【问题标题】:Set textBlock foreground based on the weekday in its Text property purely in XAML纯粹在 XAML 中根据其 Text 属性中的工作日设置 textBlock 前景
【发布时间】:2019-05-31 01:23:52
【问题描述】:

我有一个 textBlock,它在 text 属性中包含一个日期。 现在,我想根据它的 text 属性中的星期几设置该 textBlock 的前景色。

这可以纯粹在 XAML 中完成吗?

谢谢

【问题讨论】:

  • 你需要写一个转换器,我认为,将星期几转换成颜色。
  • 您需要使用该信息编辑您的问题。

标签: c# wpf xaml


【解决方案1】:

不是纯XAML,您需要创建一个实现IValueConverter的类,然后通过在XAML中引用它,您可以将TextBlock颜色绑定到日期属性,该属性将转换为@987654326 @通过转换器。

有关ValueConverter的更多信息请看这里:

https://www.codeproject.com/Tips/868163/%2FTips%2F868163%2FIValueConverter-Example-and-Usage-in-WPF

【讨论】:

  • 好的,谢谢,很高兴知道。看起来IValueConverter 的解决方案将是可行的方法。无论如何,这似乎是根据 MVVM 哲学处理转换的正确解决方案,对吗?我对 C# 和所有 MVVM 的编程非常陌生!
【解决方案2】:

现在,我想在它的 text 属性中根据星期几设置该 textBlock 的前景色

纯xaml:

<Style TargetType="{x:Type TextBlock}">
    <Style.Triggers>
        <Trigger Property="Text" Value="Monday"><!-- You will need to do this for every day of the week-->
            <Setter Property="Foreground" Value="Green"/>
        </Trigger>
    </Style.Triggers>
</Style>  

此外,如果您使用Runs 分解日期,则可以为运行分配样式,如下所示:

<TextBlock>
    <Run Text="{Binding Today}"/>
    <Run Text="{Binding Today.DayOfWeek, Mode=OneWay}"/><!-- This has to be one way as the Property DayOfWeek is readonly -->
</TextBlock>  

然后在资源中使用这个:

<Style TargetType="{x:Type Run}">
    <Style.Triggers>
       <Trigger Property="Text" Value="Friday">
            <Setter Property="Foreground" Value="Green"/>
       </Trigger>
    </Style.Triggers>
</Style>

【讨论】:

  • 这不起作用,因为包含的文本如下所示:“Freitag, 4. Januar 2019”。除非,有像“包含”命令之类的东西?我在想一个类似于DayOfWeekin 代码的解决方案,但没有找到任何东西。否则我会尝试通过转换器来完成,无论如何掌握似乎是一件好事。
  • 你可能会这么说,这就是我添加“运行”选项的原因。如果你把它分解成运行,那么这种风格就会奏效。但这是另一种选择,如果你想保持纯 xaml,就像你问的那样。
  • 谢谢!我必须弄清楚那个“跑步”的东西并尝试一下,但这听起来很有希望!
  • 您需要将样式放在顶部元素或资源标签中,而不是实际的 TextBlock
  • 从来没有让那个工作,但我现在用转换器解决了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 2020-05-14
相关资源
最近更新 更多