按钮上的 IsMouseOver 属性 不工作
IsMouseOver Property on Button not working
我有这个按钮,如果我将鼠标悬停在它上面,我想更改设计。它不工作,我没有收到错误。
我究竟做错了什么?
(我真的是 WPF 新手)
<Button MaxWidth="180"
Margin="5"
DockPanel.Dock="Top"
Padding="5"
FontSize="12"
Foreground="#1261AC"
FontWeight="SemiBold"
BorderBrush="Transparent">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" Background="LightGray" BorderThickness="1" Padding="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="#157ec4"/>
<Setter Property="Background" Value="#000000"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
按钮本身可以使用,但不会改变背景或字体的颜色。
(我例子中的颜色只是为了测试)
你的代码的问题是你直接定义了border-background为灰色。
现在您使用触发器更改控件背景。
但是,触发器设置的背景尚未与您的示例中的边框背景相关。我添加了一个模板绑定来为您解决此问题。现在模板中的边框将始终具有在您的样式中定义的背景,通过触发器设置或直接在 XAML.
中设置
请注意:
如果您使用 <Button Background="Pink"/>
在 XAML 中设置颜色,这将覆盖样式和触发器属性。
试试这件艺术品:
<Button Content="Hello there!"
MaxWidth="180"
Margin="5"
DockPanel.Dock="Top"
Padding="5"
FontSize="12"
Foreground="#1261AC"
FontWeight="SemiBold"
BorderBrush="Transparent">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="HotPink"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" Background="{TemplateBinding Background}" BorderThickness="1" Padding="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red" />
<Setter Property="Background" Value="Lime" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
我有这个按钮,如果我将鼠标悬停在它上面,我想更改设计。它不工作,我没有收到错误。 我究竟做错了什么? (我真的是 WPF 新手)
<Button MaxWidth="180"
Margin="5"
DockPanel.Dock="Top"
Padding="5"
FontSize="12"
Foreground="#1261AC"
FontWeight="SemiBold"
BorderBrush="Transparent">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" Background="LightGray" BorderThickness="1" Padding="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="#157ec4"/>
<Setter Property="Background" Value="#000000"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
按钮本身可以使用,但不会改变背景或字体的颜色。 (我例子中的颜色只是为了测试)
你的代码的问题是你直接定义了border-background为灰色。 现在您使用触发器更改控件背景。 但是,触发器设置的背景尚未与您的示例中的边框背景相关。我添加了一个模板绑定来为您解决此问题。现在模板中的边框将始终具有在您的样式中定义的背景,通过触发器设置或直接在 XAML.
中设置请注意:
如果您使用 <Button Background="Pink"/>
在 XAML 中设置颜色,这将覆盖样式和触发器属性。
试试这件艺术品:
<Button Content="Hello there!"
MaxWidth="180"
Margin="5"
DockPanel.Dock="Top"
Padding="5"
FontSize="12"
Foreground="#1261AC"
FontWeight="SemiBold"
BorderBrush="Transparent">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="HotPink"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" Background="{TemplateBinding Background}" BorderThickness="1" Padding="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red" />
<Setter Property="Background" Value="Lime" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>