【问题标题】:Can't change Button's background image无法更改 Button 的背景图片
【发布时间】:2017-11-05 07:31:07
【问题描述】:

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

这是鼠标悬停的时候

这是正常状态

这是我的代码

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

【问题讨论】:

  • 请说得更具体一些,试着展示你到目前为止所做的尝试。
  • 你能通过编辑这个问题发布你的代码吗?请向我们展示您尝试做的事情。
  • 我添加图片和来源
  • 我想你的答案就在这里:stackoverflow.com/questions/12271916/wpf-button-mouseover-image 使用对你有帮助的风格

标签: c# wpf xaml wpf-controls


【解决方案1】:

创建控件样式时需要考虑一些事项。

首先,当您声明一个触发器时,该触发器中的任何 Setter 的目标属性都不能直接在控件上设置(就像您通过直接分配 Button.Background 所做的那样)。相反,它也必须由样式中的 Setter 设置。原因在Dependency Property Value Precedence中有解释。

其次,Button 的默认 ControlTemplate 为鼠标悬停显示一个视觉覆盖,覆盖背景。您应该通过声明自己的 ControlTemplate 来替换它。

您应该考虑将图像文件添加到您的 Visual Studio 项目(例如,在名为 Images 的文件夹中)并将它们的 Build Action 设置为 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>

【讨论】:

  • 谢谢!我明天试试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2014-03-04
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多