【问题标题】:Using Style tag effectively in WPF for different images在 WPF 中为不同的图像有效地使用 Style 标签
【发布时间】:2012-08-17 19:28:15
【问题描述】:

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

<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>

但是,我猜我的应用程序中包含的所有图像都使用了在“值”属性中定义的相同图像。如果我需要为不同的图像提供不同的悬停图像而不使用此自定义覆盖,该怎么办?

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

【问题讨论】:

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


    【解决方案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>
    

    在使用这个 sn-p 时使用类似

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

    这将使图像 I1(首先定义)使用上面的模板(处理悬停时),而其他图像仍然按照您当前的模板。

    【讨论】:

    • 请注意,如果您使用的是x:Key,则无需使用TargetType。我不确定他们是如何一起工作的。我确实知道,当您不设置 TargetType 时,您需要指定定义属性的类(对于您的 Setter),如下所示:Setter Property="Image.Source" Value="c:\\2.bmp" /&gt;
    • 感谢 Jon。那篇文章很有帮助。对我来说,当我使用上面的代码(同时使用 x:Key 和 TargetType)时,它在我发布时工作得很好。你能建议我一个学习和理解这些东西的好地方吗(我的意思是 XAML 、图像和每个属性..)
    • 我建议您查看有关 WPF/XAML 的 MSDN 文章。他们可以在这里找到:msdn.microsoft.com/en-us/library/ms754130.aspx
    【解决方案2】:

    您可以定义几种不同的样式,并给它们一个x:Key 值,而不是TargetType 值。然后,您只需将图像的Style 属性设置为适当样式的x:Key

    如果您想对大部分图像应用单一样式,但又想覆盖其中的几个,那么您可以结合使用这两种方法。如果您将样式分配给一种元素(通过TargetType 属性),您可以通过显式指定它们的Style 属性来覆盖特定元素的样式。另外,如果你设置Style={x:Null},你可以让一个元素恢复到默认样式。

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 2022-11-23
      • 2014-04-12
      • 2021-09-12
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      相关资源
      最近更新 更多