Дизайнер дал мне дочернее окно Silverlight, которое было разработано в Expression Blend, и использует Диспетчер визуальных состояний для переключения между двумя режимами. Короче говоря, в дочернем окне есть кнопка расширения, которая при щелчке сдвигает другой элемент управления Grid с подробной информацией.
Это взаимодействие полностью происходит в 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>
Спасибо!