Storyboard.TargetProperty="Стиль"

Я пытаюсь перейти от использования триггеров и тем к 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, а стиль не является производным от DependencyObject, поэтому я запутался в том, что пытается заморозить. Кто-нибудь знает, что здесь происходит?

1 ответ

У меня была похожая проблема, и я нашел несколько других подобных вопросов без ответа или без хороших ответов. Мой стиль изменил только основные свойства, такие как размер шрифта и цвет, без каких-либо "freezables" на сайте. Это странная ошибка в WPF, ИМХО.

После некоторой проб и ошибок, я, кажется, начал работать, просто переместив мои определения ресурсов (на которые указывает StaticResource) из пользовательского элемента управления, в котором они использовались, в словарь внешних ресурсов, который я затем включил в App.xaml, Кроме того, пользовательский элемент управления, вызывающий эту проблему, определен в пользовательском проекте элемента управления, поэтому в основном я удалил ресурсы Style из проекта элемента управления и поместил их в свой проект.exe, который не имеет проблем с разрешением во время выполнения. (Обратите внимание, что ошибки дизайнера могут быть безопасно проигнорированы.)

Я не уверен, что это решило проблему для меня из-за того, что ресурсы были перемещены из пользовательского элемента управления или из проекта, или из обоих.

Другие вопросы по тегам