Несколько триггеров VisualState для одного визуального состояния

Я пытаюсь написать VisualState для своего нового универсального приложения под Windows 10.
Согласно документации о VisualState.StateTriggers, вы можете добавить несколько триггеров в визуальное состояние, так как это свойство имеет тип IList<StateTriggerBase>.

Документация класса VisualState также указывает на документацию StateTriggers:

один или несколько триггеров

Один или несколько триггеров, которые могут быть AdaptiveTrigger или пользовательскими триггерами, производными от StateTriggerBase. Их можно использовать, чтобы указать, когда соответствующий VisualState должен применяться автоматически без явного вызова GoToState. Дополнительные сведения см. в разделе Примечания к свойству StateTriggers.

Однако в документации не указано, как здесь работают несколько триггеров. Также нет способа изменить поведение с помощью кода C#.
Мое желаемое поведение потребовало бы некоторых AND/OR условий для тех триггеров, которые указаны в разделе StateTriggers.

Есть ли другой способ, кроме написания собственного "MultiTrigger", производного от StateTriggerBase?


person Herdo    schedule 30.07.2015    source источник


Ответы (3)


В порядке. Поскольку встроенного MultiTrigger нет, я написал свой MultiTrigger. Мультитриггер поддерживает условия AND и OR, что мне и было нужно.

Теперь он включен в пакет NuGet AdaptiveTriggerLibrary.

person Herdo    schedule 02.08.2015
comment
Я установил AdaptiveTriggerLibrary в свой проект UWP (созданный для RS1) и пытаюсь получить два MultiTrigger с AndModifier, каждый из которых работает с WindowHeightTrigger и WindowWidthTrigger, но кажется, что первый MultiTrigger всегда активен поверх второго. Неважно что я делаю. У вас есть электронная почта поддержки для этой библиотеки, где я могу получить помощь по этому поводу? Спасибо! - person Sergio0694; 16.09.2016
comment
@Sergio0694 Не стесняйтесь открывать вопрос на GitHub: github.com/Herdo/AdaptiveTriggerLibrary — я изучить его, как можно скорее. - person Herdo; 16.09.2016

Herdo, Что я заметил в поведении StateTriggers, так это то, что когда триггеры находятся в одной группе, они выполняются взаимоисключающим образом по порядку, своего рода в режиме AND. AND триггеры из разных VisualStateGroups выполняются независимо, что-то вроде режима OR. В этом наблюдаемом поведении я организую вещи, которые изменяют один и тот же набор свойств, в одну и ту же группу, чтобы условие контролировалось внутри группы.

person Juan Mejia    schedule 12.02.2018

Попробуйте использовать разные VisualStateGroups. Например, для обработки разной ширины и ориентации используйте 2 группы VisualStateGroups.

<VisualStateGroups x:Name="WidthStates">
    ...
</VisualStateGroups> 

<VisualStateGroups x:Name="OrientationStates">
    ...
</VisualStateGroups> 

просмотреть этот связанный вопрос на msdn:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/95291be1-25c7-4310-bb2b-b8fcead3b4d9/multiple-statetriggers-supporting-narrow-and-landscape

person Alberto Rivelli    schedule 18.11.2015