如何设置无边框按钮,当鼠标悬停在 WPF 中时颜色会改变
How to set a borderless button which changes its color when mouse hovering in WPF
我想将我所有按钮的样式覆盖为无边框的灰色按钮,悬停时该按钮会突出显示。
我是这样写的:
如果我删除模板部分(我什至不知道它做了什么),即使我将 BorderThickness 设置为 0,按钮也会有边框。
但是如果我保留模板部分,按钮根本不会改变它的背景颜色。
那么我可以做些什么来保留这两个功能以及为什么我的 xaml 不起作用?
顺便说一句,我在哪里可以找到我可以为特定类型的控件(如按钮)设置的 properties/triggers 的完整列表?
<Style TargetType="{x:Type Button}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Background" Value="{StaticResource TitleBrush}" />
<Setter Property="Foreground" Value="{StaticResource WhiteTextBrush}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ContentPresenter Content="{TemplateBinding Content}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource HoverBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
尝试这样的方法它会起作用
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="buttonTemplate" TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="Rect" Width="100" Height="100" Fill="Aqua"/>
<Viewbox>
<ContentControl Margin="20" Content="{TemplateBinding Content}"/>
</Viewbox>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Rect" Property="Fill" Value="Orange"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource buttonTemplate}">OK</Button>
</Grid>
为什么 BorderThickness
值没有反映到控件中?
为什么您的 xaml 不起作用?
因为,您使用简单的内容呈现器设置按钮的模板 属性,所以按钮忽略所有控件 属性 并反映您的模板。一种方法是使用示例标签改进您的模板 属性:
<ControlTemplate TargetType="{x:Type Button}">
<Label Content="{TemplateBinding Content}"
Background="{TemplateBinding Background}"
Foreground="{TemplateBinding Foreground}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="Black"/>
</ControlTemplate>
我想将我所有按钮的样式覆盖为无边框的灰色按钮,悬停时该按钮会突出显示。
我是这样写的: 如果我删除模板部分(我什至不知道它做了什么),即使我将 BorderThickness 设置为 0,按钮也会有边框。 但是如果我保留模板部分,按钮根本不会改变它的背景颜色。
那么我可以做些什么来保留这两个功能以及为什么我的 xaml 不起作用?
顺便说一句,我在哪里可以找到我可以为特定类型的控件(如按钮)设置的 properties/triggers 的完整列表?
<Style TargetType="{x:Type Button}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Background" Value="{StaticResource TitleBrush}" />
<Setter Property="Foreground" Value="{StaticResource WhiteTextBrush}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ContentPresenter Content="{TemplateBinding Content}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource HoverBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
尝试这样的方法它会起作用
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="buttonTemplate" TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="Rect" Width="100" Height="100" Fill="Aqua"/>
<Viewbox>
<ContentControl Margin="20" Content="{TemplateBinding Content}"/>
</Viewbox>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Rect" Property="Fill" Value="Orange"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource buttonTemplate}">OK</Button>
</Grid>
为什么 BorderThickness
值没有反映到控件中?
为什么您的 xaml 不起作用?
因为,您使用简单的内容呈现器设置按钮的模板 属性,所以按钮忽略所有控件 属性 并反映您的模板。一种方法是使用示例标签改进您的模板 属性:
<ControlTemplate TargetType="{x:Type Button}">
<Label Content="{TemplateBinding Content}"
Background="{TemplateBinding Background}"
Foreground="{TemplateBinding Foreground}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="Black"/>
</ControlTemplate>