在WPF中有效地使用Style标签来表示不同的图像

时间:2012-08-17 19:28:15

标签: c# .net wpf visual-studio xaml

我使用样式来定义当用户将鼠标悬停在这样的图像上时会发生什么。

<Style TargetType="{x:Type Image}">
    <Setter Property="Source" Value="c:\\2.bmp"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Source" Value="C:\\1.bmp"/>
        </Trigger>
    </Style.Triggers>
</Style>

但是,我想对于我在应用程序中包含的所有图像,使用了“Value”属性中定义的相同图像。如果我在不使用此自定义覆盖的情况下为不同的图像需要不同的悬停图像,该怎么办?

在这种情况下,任何想法我应该使用什么?或者在WPF中处理图像悬停的更好方法是什么?

2 个答案:

答案 0 :(得分:1)

我们应该像Jon建议的那样定义一个x-key值!

<Style x:Key="Name_of_your_style"  TargetType="{x:Type Image}">
<Setter Property="Source" Value="c:\\2.bmp"/>
<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Source" Value="C:\\1.bmp"/>
    </Trigger>
</Style.Triggers>

并且在使用此代码段时使用类似

的内容
 <Image Style="{StaticResource Name_of_your_style}"  Name="I1" />
 <Image Name="I2" /> 

这将使图像I1(首先定义)使用上述模板(在悬停处理时),而另一个图像保持按照当前模板。

答案 1 :(得分:0)

您可以定义多种不同的样式,并为其赋予x:Key值,而不是TargetType值。然后,您只需将图片的Style属性设置为相应样式的x:Key即可。

如果要将单个样式应用于大多数图像,但是只想为其中一些图像覆盖它,则可以将这两种方法结合使用。如果为某种类型的元素指定样式(通过TargetType属性),则可以通过显式指定其Style属性来覆盖特定元素。此外,如果设置Style={x:Null},则可以将元素恢复为默认样式。