Наложение DisplayMode UWP SplitView - не в фокусе

У меня SplitView:

<SplitView Name="splitView" 
   DisplayMode="{Binding SplitViewDisplayMode}" 
   IsPaneOpen="{Binding SplitViewIsPaneOpen}" 
   OpenPaneLength="200" CompactPaneLength="51"/>

Я также использую VisualStateManager для настройки SplitView в зависимости от размера окна приложения: (пример)

<VisualState.StateTriggers>
   <AdaptiveTrigger MinWindowWidth="500"></AdaptiveTrigger>
</VisualState.StateTriggers>

Пока все работает правильно, но я столкнулся с неожиданным результатом, когда активируются триггер выше и состояние ниже.

<VisualState.Setters>
   <Setter Value="True" Target="splitView.IsPaneOpen"></Setter>
   <Setter Value="Overlay" Target="splitView.DisplayMode"></Setter>
</VisualState.Setters>

Кажется, я не могу найти способ обнаружить событие, чтобы мой ViewModel знал, когда SplitView фокус теряется. Прямо сейчас, как было задумано, Overlay отображается до тех пор, пока пользователь не щелкнет представление (как задумано), но я хотел бы знать, когда SplitView Overlay свернут, чтобы я мог добавить дополнительные события привязки в свой HamburgerMenu.

Из того, что я переживаю, похоже, что VisualStateManager не обновляет / не меняет мои привязки

DisplayMode="{Binding SplitViewDisplayMode}"

Любые идеи относительно того, как я могу определить, исчезает ли / закрывается оверлей?

Единственное, что я могу придумать, - это создать методы, которые обнаруживают размер окна, а затем определяют, должен ли SplitView быть _13 _ / _ 14 _ / _ 15_ .. Это выполнимо, но приведет к множеству потенциальных комбинаций.

Есть ли какие-либо мысли или идеи о том, как обнаружить или заставить SplitView сказать мне, является ли Overlay Collapsed, когда пользователь щелкает элемент управления за пределами SplitView?


person Mark    schedule 22.01.2017    source источник


Ответы (1)


Чтобы привязки работали, вы должны указать их как двусторонние привязки. Без этого они будут обновлять только пользовательский интерфейс вашими изменениями в коде, а не наоборот:

<SplitView Name="splitView" 
       DisplayMode="{Binding SplitViewDisplayMode, Mode=TwoWay}" 
       IsPaneOpen="{Binding SplitViewIsPaneOpen, Mode=TwoWay}" 
       OpenPaneLength="200" CompactPaneLength="51"/>

Теперь ваши свойства должны обновляться при каждом изменении состояния.

person Martin Zikmund    schedule 22.01.2017
comment
Не знаю, почему я пропустил это ... Спасибо! Я также заметил, что DisplayMode = {Binding SplitViewDisplayMode, Mode = TwoWay} Работает только как объект, а не как строка: частный объект _SplitViewDisplayMode; публичный объект SplitViewDisplayMode {get = ›_SplitViewDisplayMode; set = ›SetProperty (ref _SplitViewDisplayMode, значение); } Спасибо еще раз - person Mark; 23.01.2017