VisualStateManager и привязка данных

WPF
  1. 9 месяцев(а)

    Добрый день! Прошу помощи.
    Исходные данные: есть XAML страница, которая имеет 2 состояния, назовем их wideState и narrowState. Переход из одного состояния в другой происходит посредством VisualStateManager. Вот пример разметки:
    <VisualStateManager.VisualStateGroups> <VisualStateGroup> <VisualState x:Name="wideState"> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="641" /> </VisualState.StateTriggers> <VisualState.Setters> <Setter Target="Splitter.DisplayMode" Value="Inline"/> </VisualState.Setters> </VisualState> <VisualState x:Name="narrowState"> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="0" /> </VisualState.StateTriggers> <VisualState.Setters> <Setter Target="Splitter.DisplayMode" Value="Overlay"/> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups>
    В данном случае в зависимости от ширины окна меняется свойство Splitter.DisplayMode.
    Без привязки данных все работает. При переходе на страницу свойство Splitter.DisplayMode будет зависеть от ширины окна.
    Проблема заключается в том, что если для свойства Splitter.DisplayMode задана привязка данных, то результат при переходе на страницу будет зависеть именно от привязки, а не от ширины окна.
    Получается что при переходе на страницу сначала выполняется VisualStateManager::GoToState, а только затем привязка данных.
    Чтобы добиться нужного эффекта нужно в коде определять размер экрана и повторно вызывать VisualStateManager::GoToState с переходом в нужное состояние.
    Можно ли как-нибудь избежать дублирования кода? Или данный способ нужно применять в любом случае?

или зарегистрируйтесь чтобы ответить