【发布时间】:2012-09-04 21:58:19
【问题描述】:
我正在学习 C# 和 XAML 来构建 Windows 应用程序。我想创建一个以图像为背景的按钮。但是当悬停在按钮上时,按钮的背景应该变成另一个“突出显示”的图像。我试图将背景图像添加到 Resources.resx 中。我必须使用 xaml 样式创建一个自定义按钮,以摆脱 wpf 按钮的默认突出显示效果。
我根据在 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>
对于实际图像,我将其放在根目录中的 Resources 文件夹中。在使用 Visual Studio 中的资源工具将图像导入其中后,我在“属性”窗格中将图像 build settings 更新为 Resource。
感谢 dbaseman 的解决方案
【问题讨论】:
标签: c# wpf xaml wpf-controls