【问题标题】:Conditional style in WPFWPF 中的条件样式
【发布时间】:2012-02-18 12:02:31
【问题描述】:

我制作了一种样式,使TextBlock 看起来像一个链接:

<Style x:Key="linkStyle" TargetType="TextBlock">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="TextDecorations" Value="Underline" />
        </Trigger>
    </Style.Triggers>
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="Foreground" Value="Blue" />
    <EventSetter Event="MouseLeftButtonDown" Handler="navigateLink" />
</Style>

只有TextBlock.Texthttp://开头时如何应用?

【问题讨论】:

  • 您可以使用 StyleSelector。看到这个帖子stackoverflow.com/questions/5082509/…
  • 可能你必须使用事件和自定义 C# 代码来做到这一点;默认情况下,XAML 不够智能,无法模拟 String.StartsWith 或基于正则表达式应用样式。当然,您也可以创建继承 TextBlock 并具有像 DoesTextStartWithHttp 这样的属性的自定义控件,因此您可以在 XAML 中使用此属性,但是,对我来说,使用事件处理程序来更改 C# 代码中的样式更容易。
  • 可以使用自定义 C# 代码(它已经有一些 navigateLink 函数),但我希望能够将生成的样式应用于简单的 TextBlock

标签: c# .net wpf xaml


【解决方案1】:

试试这个

<Style x:Key="linkStyleConditional" TargetType="{x:Type TextBlock}">
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
                <Condition Binding="{Binding Path=Text, Converter={StaticResource SomeConverter}}" Value="True"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Foreground" Value="Orange" />
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

如果文本以 http// 开头,则在 SomeConverter 中编写逻辑:然后返回 true 否则返回 false。我希望这会有所帮助。

【讨论】:

  • 这是非常好的答案,只有一件事。如何在带有条件的 xaml 中编写 SomeConverter?
猜你喜欢
  • 1970-01-01
  • 2015-06-16
  • 2016-09-02
  • 2017-08-22
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多