Я работаю над текстовым редактором, пользовательский интерфейс которого будет иметь два состояния: узкий и широкий.
Narrow в первую очередь предназначен для использования с окнами размером менее 720 пикселей и широким, когда больше. Однако, кроме того, если открыт только один файл, я хочу, чтобы узкое состояние пользовательского интерфейса использовалось независимо от размера окна (т.е. даже если оно> = 720 пикселей).
У меня есть свойство bool, которое отслеживает, открыто ли более одного файла:
private bool _moreThan1FileOpen = false;
public bool MoreThan1FileOpen
{
get { return _moreThan1FileOpen; }
set
{
_moreThan1FileOpen = value;
}
}
Но мне не удалось связать триггер VisualState со значением этого свойства, т. Е. Если true, перейти в это состояние, а если false, перейти к следующему VisualState.
Будем очень признательны за любые рекомендации о том, как я могу достичь этого с помощью VisualState.StateTriggers.
--
Как посоветовал dotMorten, я изменил средство задания свойств, чтобы вызвать событие PropertyChanged, а также свойство int:
private bool _numFilesOpen = 0;
public bool NumFilesOpen
{
get { return _numFilesOpen; }
set
{
_numFilesOpen = value;
RaisePropertyChanged("NumFilesOpen");
}
}
В идеале я бы работал с двумя состояниями:
<VisualState x:Name="WideState">
<VisualState.StateTriggers>
<triggers:CompositeStateTrigger Operator="And">
<triggers:CompareStateTrigger Value="{Binding NumFilesOpen}" CompareTo="1" Comparison="GreaterThan" />
<triggers:CompareStateTrigger Value="{Binding WindowWidth}" CompareTo="719" Comparison="GreaterThan" />
</VisualState.StateTriggers>
<VisualState x:Name="NarrowState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
Однако триггер составного состояния, похоже, не работает, поэтому я получил 3 состояния:
<VisualState x:Name="NarrowStatee">
<VisualState.StateTriggers>
<triggers:CompareStateTrigger Value="{Binding NumFilesOpen}" CompareTo="2" Comparison="LessThan" />
</VisualState.StateTriggers>
<VisualState x:Name="WideState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720" />
</VisualState.StateTriggers>
<VisualState x:Name="NarrowState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>