无法更改按钮的背景图像
Can't change Button's background image
我的按钮控制有问题。当我将鼠标悬停在它上面时,按钮的图像丢失了。然而,当鼠标离开它时,图像又回来了。我想在鼠标悬停为真时保留图像。
这是鼠标悬停的时候
这是正常状态
这是我的代码
<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# 中修复吗?
创建控件样式时需要考虑一些事项。
首先,当您声明一个触发器时,该触发器中任何 Setter 的目标 属性 不得直接在控件上设置(就像您通过分配 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>
我的按钮控制有问题。当我将鼠标悬停在它上面时,按钮的图像丢失了。然而,当鼠标离开它时,图像又回来了。我想在鼠标悬停为真时保留图像。
这是鼠标悬停的时候
这是正常状态
这是我的代码
<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# 中修复吗?
创建控件样式时需要考虑一些事项。
首先,当您声明一个触发器时,该触发器中任何 Setter 的目标 属性 不得直接在控件上设置(就像您通过分配 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>