【问题标题】:What reasons could prevent explicit and implicit styles from applying?什么原因会阻止显式和隐式样式的应用?
【发布时间】:2011-04-29 11:10:19
【问题描述】:

我有一个 WPF 测试项目,我用它来回答 SO 问题,不知何故,随着时间的推移,这个项目变得非常混乱,有些东西不再正常工作。这可能不是一个真正的问题,因为我可以把它扔掉并创建一个新的,但显然这在每种情况下都不是一个可行的解决方案,所以我认为知道什么会导致这种行为可能会很有趣。

特别令人惊讶的是,即使是显式样式也不适用。例如我有这种风格

<Style x:Key="EnlargeImageStyle" TargetType="{x:Type Image}">
    <Setter Property="LayoutTransform">
        <Setter.Value>
            <ScaleTransform ScaleX="1" ScaleY="{Binding RelativeSource={RelativeSource Self}, Path=ScaleX}"/>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="2" Duration="0:0:0.3"
                                     Storyboard.TargetProperty="LayoutTransform.ScaleX"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation To="1" Duration="0:0:0.3"
                                     Storyboard.TargetProperty="LayoutTransform.ScaleX"/>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>

这是在Window.Resources 中定义的,我将其应用于像这样的最小定义图像:

<Image Width="80" Height="48" Style="{StaticResource EnlargeImageStyle}">
    <Image.Source>
        <BitmapImage UriSource="pack://application:,,,/Images/Img.png"/>
    </Image.Source>
</Image>

而且它不会做任何事情,如果我尝试隐式应用它,我也不会得到任何结果。

如标题所述,什么会阻止显式和隐式样式的应用?

我不想把这个限制在我的问题上,任何可能在野外遇到的原因都可以

【问题讨论】:

    标签: wpf debugging xaml resources styles


    【解决方案1】:

    我想指出为什么不应用隐式样式有两个常见原因:

    目标元素...

    • ...在 DataTemplate 或 ControlTemplate 内(Application.Resources 不适用)
    • ...继承自 TargetType 中指定的类,而不是相同。

    【讨论】:

    • 太好了,谢谢 HB。这就解释了为什么当 Window 类型存在样式时 MainWindow 没有设置某些属性。
    • @Sam:这是一个相当不幸的限制:(
    【解决方案2】:

    您的代码看起来不错,应该可以工作。确保没有其他样式或动画没有覆盖您的默认样式。在评估依赖属性的值时,wpf 依赖属性系统会考虑一些因素,例如从动画中设置的值将具有最高优先级。通过以下链接了解更多信息

    http://msdn.microsoft.com/en-us/library/ms743230.aspx

    您可以使用Snoop 等工具在运行时进行调试,以检查实际应用了哪些样式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 2016-12-27
      • 2014-08-14
      • 1970-01-01
      • 2023-04-07
      • 2015-06-11
      • 2010-11-09
      • 2019-08-25
      相关资源
      最近更新 更多