Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的条件样式_C#_.net_Wpf_Xaml - Fatal编程技术网

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中编写带条件的转换器?