无法更改按钮的背景图像

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>