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