C# WPF中的条件样式
我制作了一个样式,使C# WPF中的条件样式,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我制作了一个样式,使TextBlock看起来像一个链接: <Style x:Key="linkStyle" TargetType="TextBlock"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="TextDecorations" Value="Underline" />
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.Text
以http://?开头时应用它
<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。我希望这会有所帮助。您可以使用样式选择器。看到这篇文章,你可能需要使用事件和自定义C代码来实现这一点;默认情况下,XAML不够智能,无法模拟String.StartsWith或基于正则表达式应用样式。当然,您也可以创建自定义控件,该控件继承TextBlock并具有DoesTextStartWithHttp之类的属性,因此您可以在XAML中使用此属性,但是,对我来说,使用事件处理程序更改C代码中的样式更容易。使用自定义C代码也可以(而且它已经有了一些
navigateLink
函数)但我希望能够将结果样式应用于简单的TextBlock
,这是一个非常好的答案,只有一件事。如何在xaml中编写带条件的转换器?