【问题标题】:Storyboard.TargetProperty="Style"Storyboard.TargetProperty="风格"
【发布时间】:2014-04-03 02:02:05
【问题描述】:

我正在尝试从使用触发器和主题切换到 VisualStateManager,因为 WindowsRT 似乎正在朝着这个方向发展,我希望尽量减少不同的代码量。为此,我正在尝试设置一个简单的方案,该方案将在平板设备(例如 Surface 2)的大边距和桌面方案的正常外观边距之间切换。我知道我可以通过直接在对象上设置属性来做到这一点,但是如果我在一个控件中有 15 个标签,那么创建一个为每个标签设置边距的情节提要根本不支持。所以我试图用这段代码交换每个标签上的样式:

        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup Name="DeviceStates">
                <VisualState Name="Desktop"/>
                <VisualState Name="TabletLandscape">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FirstNameLabel"
                                                       Storyboard.TargetProperty="Style">
                            <DiscreteObjectKeyFrame KeyTime="0"
                                                    Value="{StaticResource TabletLabelStyle}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

我在搜索中看到了几个示例,它们显示了在 Silverlight 和 Windows 应用商店应用程序中工作的几乎相同的模式。当我在普通的 WPF 中尝试这个时,我得到“这个可冻结的文件不能被冻结”。我用 Reflector 挖掘了代码,而 Style 不是从 DependencyObject 派生的,所以我对试图冻结的内容感到困惑。有人知道这里发生了什么吗?

【问题讨论】:

    标签: wpf styles visualstatemanager freezable


    【解决方案1】:

    我遇到了类似的问题,并发现了一些其他类似的问题,要么没有答案,要么没有好的答案。我的 Style 只更改了基本属性,例如字体大小和颜色,站点中没有任何“可冻结”。这是 WPF 中的一个奇怪错误,恕我直言。

    经过一些试验和错误,我似乎已经通过简单地将我的资源定义(StaticResource指向的)从使用它们的用户控件移动到外部资源来使其工作字典,然后我将其包含在 App.xaml 中。此外,导致此问题的用户控件是在自定义控件项目中定义的,所以基本上我从控件项目中删除了 Style 资源并将它们放入我的 .exe 项目中,该控件没有问题解决在运行时。 (请注意,可以安全地忽略设计器错误。)

    我不确定是将资源移出用户控制还是移出项目,或两者兼而有之,这是否为我解决了问题。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多