C# 当按钮悬停时,如何为按钮的子项textblock加下划线
我有以下风格C# 当按钮悬停时,如何为按钮的子项textblock加下划线,c#,wpf,triggers,C#,Wpf,Triggers,我有以下风格 <Style x:Key="RoundedBtn" TargetType="{x:Type Button}"> <Setter Property="Background" Value="White"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderBrush" Value
<Style x:Key="RoundedBtn" TargetType="{x:Type Button}">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="button" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Image x:Name="image" Source="{Binding ButtonImage, RelativeSource={RelativeSource AncestorType=Button}}" Margin="0,2,0,3" HorizontalAlignment="Left" Width="40" />
<Border BorderBrush="{x:Null}" Height="16" Margin="45,15,0,14" Width="123" HorizontalAlignment="Left">
<TextBlock x:Name="textBlock" Margin="-1" TextWrapping="Wrap" Text="{Binding ButtonText, RelativeSource={RelativeSource AncestorType=Button} }"
FontSize="13"
FontFamily="{DynamicResource Helvetica}" VerticalAlignment="Center" TextDecorations="{x:Null}">
</TextBlock>
</Border>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="#8da0aa"></Setter>
<Setter Property="Foreground" Value="#318EE4"></Setter>
<Setter TargetName="textBlock" Property="TextBlock.TextDecorations" Value="Underline">
<!--That Text decoration part doesnt work--></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我将此样式应用于我的“usercontrol”(实际上是一个按钮):
生成项目时,“MyButton”出现在自定义控件中。但是如果我把它拖到我的表单上并测试它,文本下划线就不起作用了
但是,如果我在表单上放置一个普通按钮,然后应用RoundedBtn样式,它会工作,为什么
顺便说一句,我试图实现的是在Setter中使用一个类似于左菜单按钮的按钮:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" >
<Setter TargetName="textBlock" Property="TextBlock.TextDecorations" Value="Underline" />
</Trigger>
</ControlTemplate.Triggers>
整个样式如下所示(为了可读性,我删除了不相关的部分)
这正是我昨天所做的。对我来说,这似乎是答案,但我不知道为什么,它不起作用。我用actuel风格编辑了我的文章。请注意,它是在ControlTemplate.Triggers
中定义的,而不是style.Triggers
。代码在我的测试中起作用,当鼠标悬停在按钮上时,文本会加下划线。我想我编辑帖子的速度不够快,您看到了旧代码,请查看我编辑的代码。我已将触发器放入ControlTemplate。触发器但仍然不起作用。您的代码在我这边起作用:我需要硬编码TextBlock的文本,由于Button类中没有名为ButtonText
的属性,所以我发现如果我在表单上放置一个简单的按钮并应用此样式,下划线就可以工作。我有一个名为MyButton的用户控件,它是一个按钮,我在上面应用了这种样式。因此,我有一个自定义的“MyButton”,作为一个常用控件,我只需在窗体上拖动它。但是那样做是行不通的。因此,我只需按下一个按钮,每次都应用样式,即使这不是我真正想要的。我已经编辑了我的帖子,向你展示了“我的按钮”控制代码。
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" >
<Setter TargetName="textBlock" Property="TextBlock.TextDecorations" Value="Underline" />
</Trigger>
</ControlTemplate.Triggers>
<Style x:Key="RoundedBtn" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="button">
<Grid>
<Border>
<TextBlock x:Name="textBlock" Margin="-1" TextWrapping="Wrap" Text="ABC"
FontSize="13" TextDecorations="{x:Null}">
</TextBlock>
</Border>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" >
<Setter TargetName="textBlock" Property="TextBlock.TextDecorations" Value="Underline" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>