WPF中的条件样式

6

我已经创建了一个样式,使得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:// 开头时应用它?

1
您可以尝试使用StyleSelector。请参阅此帖子https://dev59.com/om445IYBdhLWcg3wBVrz - Phil
1
可能你需要使用事件和自定义的C#代码来实现这个功能;默认情况下,XAML并不足够智能,无法模拟String.StartsWith或根据正则表达式应用样式。当然,你也可以创建一个继承TextBlock并具有类似DoesTextStartWithHttp属性的自定义控件,这样你就可以在XAML中使用该属性,但对我而言,在C#代码中使用事件处理程序更容易改变样式。 - Vitalii
可以使用自定义的C#代码(已经有一些了,如navigateLink函数),但我希望能够将结果样式应用于简单的TextBlock - Poma
1个回答

15

试试这个

<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>

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


这是非常好的答案,只有一件事。 我如何在XAML中编写带有条件的SomeConverter? - Khawaja Asim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接