C# 设置触发错误中的文本装饰
最初我试图通过触发器更改TextEdition中笔的颜色,但当我为笔设置x:Name属性时,我遇到了一个找不到目标的错误,因此我已将模板更改为以下内容:C# 设置触发错误中的文本装饰,c#,wpf,xaml,triggers,C#,Wpf,Xaml,Triggers,最初我试图通过触发器更改TextEdition中笔的颜色,但当我为笔设置x:Name属性时,我遇到了一个找不到目标的错误,因此我已将模板更改为以下内容: <ControlTemplate x:Key="TabButton" TargetType="{x:Type Button}"> <Border x:Name="border" Padding="10,5" CornerRadius="5,5,0,0" Background="#62A9FF">
<ControlTemplate x:Key="TabButton" TargetType="{x:Type Button}">
<Border x:Name="border" Padding="10,5" CornerRadius="5,5,0,0" Background="#62A9FF">
<TextBlock x:Name="text" Text="{TemplateBinding Content}"
Cursor="Hand" Foreground="#F9FCFF">
<TextBlock.TextDecorations>
<TextDecoration Location="Underline"
PenThicknessUnit="FontRecommended">
<TextDecoration.Pen>
<Pen Brush="White" Thickness="1">
<Pen.DashStyle>
<DashStyle Dashes="5"/>
</Pen.DashStyle>
</Pen>
</TextDecoration.Pen>
</TextDecoration>
</TextBlock.TextDecorations>
</TextBlock>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="local:MainWindow.TabActive" Value="False">
<Setter TargetName="border" Property="Background" Value="Transparent"/>
<Setter TargetName="text" Property="Foreground" Value="Black"/>
<Setter TargetName="text" Property="TextDecorations">
<Setter.Value>
<TextDecorationCollection>
<TextDecoration Location="Underline">
<TextDecoration.Pen>
<Pen Brush="Gray" Thickness="1">
<Pen.DashStyle>
<DashStyle Dashes="5"/>
</Pen.DashStyle>
</Pen>
</TextDecoration.Pen>
</TextDecoration>
</TextDecorationCollection>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
现在应用程序生成时没有错误,但运行时出现错误:
无法将“System.Windows.TextDecoration”类型的内容添加到System.Windows.TextDecorationCollection类型的对象中
怎么了?或者有其他方法吗?无法重现这样的错误。请注意,即使没有错误,触发器也无法正常工作,因为您直接在接管触发器设置器的目标对象上设置值 下面是一个变量
TextDecorations
的示例,它可以在鼠标悬停时进行更改:
<ContentControl Content="Test">
<ContentControl.Template>
<ControlTemplate TargetType="{x:Type ContentControl}">
<TextBlock Name="tb" Text="{TemplateBinding Content}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextDecorations">
<Setter.Value>
<TextDecorationCollection>
<TextDecoration>
<TextDecoration.Pen>
<Pen Brush="Blue" />
</TextDecoration.Pen>
</TextDecoration>
</TextDecorationCollection>
</Setter.Value>
</Setter>
</Style>
</TextBlock.Style>
</TextBlock>
<ControlTemplate.Triggers>
<Trigger Property="ContentControl.IsMouseOver" Value="True">
<Setter TargetName="tb" Property="TextDecorations">
<Setter.Value>
<TextDecorationCollection>
<TextDecoration>
<TextDecoration.Pen>
<Pen Brush="Red" />
</TextDecoration.Pen>
</TextDecoration>
</TextDecorationCollection>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
我的方法类似,但没有模板控件
<TextBlock Text="5000.00" FontSize="20" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property ="IsMouseOver" Value="True">
<Setter Property="TextDecorations">
<Setter.Value>
<TextDecorationCollection>
<TextDecoration Location="Underline">
<TextDecoration.Pen>
<Pen Brush="Red"/>
</TextDecoration.Pen>
</TextDecoration>
</TextDecorationCollection>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property ="IsMouseOver" Value="False">
<Setter Property="TextDecorations">
<Setter.Value>
<TextDecorationCollection>
<TextDecoration Location="Underline">
<TextDecoration.Pen>
<Pen Brush="LimeGreen"/>
</TextDecoration.Pen>
</TextDecoration>
</TextDecorationCollection>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
谢谢!通过样式设置初始值确实有助于解决问题