为多个WPF TextBlock文本加下划线

时间:2013-10-14 08:47:07

标签: wpf textblock underline

当鼠标悬停在其中任何一个上时,如何使多个TextBlock文本加下划线?

<StackPanel Orientation="Horizontal">
     <TextBlock Style="{StaticResource UnderlineStyle}" Text="{Binding FirstValue}" />
     <TextBlock Style="{StaticResource UnderlineStyle}" Text=" - " />
     <TextBlock Style="{StaticResource UnderlineStyle}" Text="{Binding SecondValue}" />
</StackPanel>

<Style x:Key="UnderlineStyle" TargetType="TextBlock">
     <Style.Triggers>
          <Trigger Property="IsMouseOver" Value="True">
               <Setter Property="TextDecorations" Value="Underline" />
           </Trigger>
     </Style.Triggers>
</Style>

上面的代码强加了任何TextBlocks彼此独立,但我需要所有这些都被加下划线,当它们中的任何一个被鼠标覆盖时。

1 个答案:

答案 0 :(得分:1)

您应该将DataTrigger与MultiBinding一起使用 -

<MultiBinding Converter="{StaticResource myConverter}">   
  <Binding ElementName="textBlock1" Path="IsMouseOver" />
  <Binding ElementName="textBlock2" Path="IsMouseOver" />
  <Binding ElementName="textBlock3" Path="IsMouseOver" />
</MultiBinding>

并且在转换器中,如果其中一个为真,则返回true。

另一个选项(第一个更好)是为IsMouseOver提供3个DataTriggers任何文本块(给它们命名,并在Binding中使用ElementName)。

<DataTrigger Binding="{Binding ElementName=textBlock1, Path=IsMouseOver}" Value="True" >
    <Setter Property="TextDecorations" Value="Underline" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=textBlock2, Path=IsMouseOver}" Value="True" >
    <Setter Property="TextDecorations" Value="Underline" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=textBlock3, Path=IsMouseOver}" Value="True" >
    <Setter Property="TextDecorations" Value="Underline" />
</DataTrigger>