Nel*_*ius 77 wpf mouseover button
我的问题是,在WPF中,每当我尝试使用触发器或动画更改按钮背景的颜色时,默认鼠标悬停效果(灰色与橙色光晕)似乎优先.
经过广泛的搜索后,我对如何消除这种影响毫无头绪.
dod*_*der 102
这类似于Mark Heath所提到的解决方案,但没有尽可能多的代码来创建一个非常基本的按钮,没有内置鼠标动画效果.它保留了一个简单的鼠标效果,将按钮边框显示为黑色.例如,可以将样式插入到Window.Resources或UserControl.Resources部分中(如图所示).
<UserControl.Resources>
<!-- This style is used for buttons, to remove the WPF default 'animated' mouse over effect -->
<Style x:Key="MyButtonStyle" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="1"
Padding="4,2"
BorderBrush="DarkGray"
CornerRadius="3"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="Black" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<!-- usage in xaml -->
<Button Style="{StaticResource MyButtonStyle}">Hello!</Button>
Run Code Online (Sandbox Code Playgroud)
Lya*_*all 22
只是添加一个非常简单的解决方案,这对我来说已经足够了,我认为解决OP的问题.我在这个答案中使用了解决方案,除了使用常规Background值而不是图像.
<Style x:Key="SomeButtonStyle" TargetType="Button">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
除了强制Background始终是Transparent模板化按钮的背景之外没有重新模板 - 一旦完成,鼠标悬停不再影响背景.显然可以替换Transparent任何首选值.
小智 8
松饼人有一个非常简单的答案,对我有用。
要添加更具体的方向,至少对于VS 2013:
... Style="{DynamicResource MouseOverNonDefault}"/>这个链接帮了我很多 http://www.codescratcher.com/wpf/remove-default-mouse-over-effect-on-wpf-buttons/
在UserControl.Resources或Window.Resources 中定义样式
<Window.Resources>
<Style x:Key="MyButton" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border" BorderThickness="0" BorderBrush="Black" Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.8" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
然后以这种方式将样式添加到您的按钮Style="{StaticResource MyButton}"
<Button Name="btnSecond" Width="350" Height="120" Margin="15" Style="{StaticResource MyButton}">
<Button.Background>
<ImageBrush ImageSource="/Remove_Default_Button_Effect;component/Images/WithStyle.jpg"></ImageBrush>
</Button.Background>
</Button>
Run Code Online (Sandbox Code Playgroud)