无法更改Button的背景图片

时间:2017-11-05 07:31:08

标签: c# wpf xaml wpf-controls

我的按钮控制有问题。当我将鼠标悬停在它上面时,按钮的图像丢失了。但是,当鼠标离开时,图像会返回。当鼠标悬停时,我想保留图像。

这是鼠标结束时

enter image description here

这是正常状态

enter image description here

这是我的代码

 <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#中修复吗?

1 个答案:

答案 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>