我的按钮控制有问题。当我将鼠标悬停在它上面时,按钮的图像丢失了。但是,当鼠标离开时,图像会返回。当鼠标悬停时,我想保留图像。
这是鼠标结束时
这是正常状态
这是我的代码
<Button Name="miliage_btn" Canvas.Left="775" Canvas.Top="57" Width="239" Height="80" Click="Button_Click" >
<Button.Background>
<ImageBrush ImageSource="D:\남경현\로드오브다이스 시뮬/pack0.jpg">
</ImageBrush>
</Button.Background>
</Button>
我试试这段代码
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="D:\남경현\로드오브다이스 시뮬/1회뽑기.png"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
可以在xaml或c#中修复吗?
答案 0 :(得分:0)
创建控件样式时需要考虑几件事。
首先,当您声明一个Trigger时,不能直接在控件上设置该Trigger中任何Setter的target属性(就像您直接分配Button.Background
一样)。它必须由样式中的Setter设置。原因在Dependency Property Value Precedence中解释。
其次,Button的默认ControlTemplate显示鼠标悬停的可视叠加层,它覆盖背景。您应该通过声明自己的ControlTemplate来替换它。
您应该考虑将图像文件添加到Visual Studio项目(例如,在名为Images的文件夹中),并将其构建操作设置为Resource
,而不是从绝对文件路径加载图像。
<Button Content="Hello">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="Images/StandardBackground.png"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="Images/MouseOverBackground.png"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>