Дизайнер дал мне дочернее окно Silverlight, которое было разработано в Expression Blend, и использует диспетчер визуальных состояний для переключения между двумя режимами. Короче говоря, в дочернем окне есть кнопка расширения, которая при нажатии на нее сглаживает еще один элемент управления сеткой с подробной информацией.Переключение на визуальное состояние из кода с помощью VisualStateManager
Это взаимодействие происходит полностью в XAML. Однако мне нужно улучшить его, чтобы, если выполняются определенные условия, скажем, если пользователь выберет какой-либо вариант «Всегда показывать расширенные данные» - что при открытии дочернего окна будет расширено расширенное визуальное состояние.
Я думал, что это было так же просто, как вызов:
VisualStateManager.GoToState(this, "VisualStateDetails", false);
Но это не работает. Что мне не хватает? (Я прошу прощения, если я пропущу что-то очевидное, я относительно не знаком с Silverlight и совсем не знаком с Visual State Manager.)
Вот XAML, который немного удален для краткости.
<Grid x:Name="LayoutRoot" Margin="2" DataContext="{Binding ProjectNode, Mode=TwoWay}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="EditorWindowStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="VisualStateNormal"/>
<VisualState x:Name="VisualStateDetails">
<Storyboard>
<!-- snip -->
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<!-- snip -->
А вот кнопка, при нажатии, расширяет детали:
<Button ...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:GoToStateAction StateName="VisualStateDetails"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
Спасибо!
Это «Кнопка» внутри «сети»? Если нет, вы должны вызвать состояние следующим образом: VisualStateManager.GoToState (LayoutRoot, «VisualStateDetails», false); – NestorArturo
У меня нет доступа к коду прямо сейчас, но имеет ли значение, где находится кнопка? Чтобы быть ясным, я хочу перейти к значению «VisualStateDetails» из кода, а именно в методе «Инициализация» дочернего окна. И я помню, что я попытался использовать 'LayoutRoot' в качестве первого параметра для GoToState, но я получил сообщение об ошибке, что Grid не является элементом управления. –
Да ... важно положение кнопки в соответствии с элементом управления, имеющим VisualStateManager, если он находится внутри или снаружи, которые управляют изменениями синтаксиса. – NestorArturo