我正在学习C#和XAML,以构建Windows应用程序。我想创建一个带有图像背景的按钮。但是当鼠标悬停在按钮上时,按钮的背景应该更改为另一个“高亮”图像。我尝试将背景图像添加到Resources.resx中。我必须使用xaml样式创建自定义按钮,以消除wpf按钮的默认高亮效果。
我从SO上找到了一些代码来创建自定义按钮。代码如下(在新的资源字典中):
我应该放什么东西才能将背景更改为另一张图片,无论是在我的resources.resx还是其他位置?(不确定要把图片放在哪里才能访问它)。我在SO上搜索过,但找到的解决方案并不完全符合我的需求。如果这是一个重复的问题,我很抱歉。
摘要:
如何在XAML中的鼠标悬停触发器中更改按钮的背景图像? 我应该把图片放在哪里,以便在触发器代码中可以访问它?
更新: 这是我作为触发器动作放置的代码,但图片没有更新。我确保将图像构建操作设置为资源,并将其放在名为“Resources”的文件夹中。
代码:
文件结构如下:
对于实际的图片,我将其放置在根目录下的资源文件夹中。在使用Visual Studio中的资源工具导入图像后,在属性窗格中更新了图像构建设置为资源。 感谢dbaseman提供的解决方案。
我从SO上找到了一些代码来创建自定义按钮。代码如下(在新的资源字典中):
<!-- This style is used for buttons, to remove the WPF default 'animated' mouse over effect -->
<Style x:Key="StartMenuButtons" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="0"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<!-- UPDATE THE BUTTON BACKGROUND -->
<Setter Property="Background" Value="WHAT GOES HERE" TargetName="border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我应该放什么东西才能将背景更改为另一张图片,无论是在我的resources.resx还是其他位置?(不确定要把图片放在哪里才能访问它)。我在SO上搜索过,但找到的解决方案并不完全符合我的需求。如果这是一个重复的问题,我很抱歉。
摘要:
如何在XAML中的鼠标悬停触发器中更改按钮的背景图像? 我应该把图片放在哪里,以便在触发器代码中可以访问它?
更新: 这是我作为触发器动作放置的代码,但图片没有更新。我确保将图像构建操作设置为资源,并将其放在名为“Resources”的文件夹中。
代码:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/Simon;component/Resources/btn_bg_hover.jpg" />
</Setter.Value>
</Setter>
</Trigger>
文件结构如下:
Simon
Simon
Resources
all the images
Fonts
bin
obj
Properties
解决方案
以下是完整代码,允许鼠标悬停时更改按钮的图像:
<!-- This style is used for buttons, to remove the WPF default 'animated' mouse over effect -->
<Style x:Key="StartMenuButtons" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="0"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border">
<Setter.Value>
<ImageBrush ImageSource="Resources/btn_bg_hover.jpg" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
对于实际的图片,我将其放置在根目录下的资源文件夹中。在使用Visual Studio中的资源工具导入图像后,在属性窗格中更新了图像构建设置为资源。 感谢dbaseman提供的解决方案。
<Image Source='' />
元素,并确保它正确显示。源应该只是/Simon;component/Resources/image.jpg
,但也有一个向导按钮可以让Visual Studio设置它。 - McGarnagleBackground
从{TemplateBinding Background}
更改为实际值(比如Transparent
),它应该可以工作。你能做到这点吗,还是需要模板绑定? - McGarnagle