C# 如何仅使用xaml创建悬停图像
我想重新考虑我只使用XAML所做的事情。我所拥有的是工作,但它背后有代码,如果可能的话,我宁愿它不这样做 首先是我的模型课C# 如何仅使用xaml创建悬停图像,c#,xaml,mvvm,C#,Xaml,Mvvm,我想重新考虑我只使用XAML所做的事情。我所拥有的是工作,但它背后有代码,如果可能的话,我宁愿它不这样做 首先是我的模型课 public class ViewModelCommandButton : ViewModelMenuItem { public ViewModelCommandButton(ICommand cmd, string toolTip, string imageUrl, string hoverImageUrl, MenuData menuData)
public class ViewModelCommandButton : ViewModelMenuItem
{
public ViewModelCommandButton(ICommand cmd, string toolTip, string imageUrl, string hoverImageUrl, MenuData menuData)
: base(cmd, menuData)
{
this.ToolTip = toolTip;
this.ImageUrl = imageUrl;
this.HoverImageUrl = hoverImageUrl;
}
public string ToolTip { get; private set; }
public string ImageUrl { get; private set; }
public string HoverImageUrl { get; private set; }
}
我的XAML看起来像这样
<UserControl.Resources>
<Style x:Key="ImageHyperLink" TargetType="Hyperlink">
<Setter Property="TextDecorations" Value="{x:Null}" />
</Style>
</UserControl.Resources>
<Style x:Key="RectangleButton" TargetType="{x:Type Rectangle}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" Value="{DynamicResource Hover}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Fill" Value="{DynamicResource Normal}" />
</Trigger>
</Style.Triggers>
</Style>
我试着写一种风格来为我做这件事,但没有成功。如果我的目标是宽度或高度,但不是填充,则正确激发样式
我从一张图片开始,但认为这可能是一个问题,所以采用了你在这里看到的方法
我的风格是这样的
<UserControl.Resources>
<Style x:Key="ImageHyperLink" TargetType="Hyperlink">
<Setter Property="TextDecorations" Value="{x:Null}" />
</Style>
</UserControl.Resources>
<Style x:Key="RectangleButton" TargetType="{x:Type Rectangle}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" Value="{DynamicResource Hover}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Fill" Value="{DynamicResource Normal}" />
</Trigger>
</Style.Triggers>
</Style>
如果没有ImageBrush作为资源,这应该可以工作:
<Rectangle ...>
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Fill">
<Setter.Value>
<ImageBrush ImageSource="{Binding ImageUrl}"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill">
<Setter.Value>
<ImageBrush ImageSource="{Binding HoverImageUrl}"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
您可以将样式设置为资源:
<UserControl.Resources>
<Style TargetType="{x:Type Rectangle}" x:Key="RectangleButton">
<Setter Property="Fill">
<Setter.Value>
<ImageBrush ImageSource="{Binding ImageUrl}"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill">
<Setter.Value>
<ImageBrush ImageSource="{Binding HoverImageUrl}"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
...
<Rectangle ... Style="{StaticResource RectangleButton}"/>
...
Codebehind非常适合UI任务。不要被认为不存在的MVVM格言所束缚。谢谢!这两种方法对我都有效。在看到你的解决方案后,我意识到为什么我的解决方案不起作用。没有,我告诉解析器它需要制作一个ImageBrush,我也不知道怎么做。