Переключение в визуальное состояние из кода с помощью VisualStateManager - PullRequest
1 голос
/ 12 января 2012

Дизайнер дал мне дочернее окно 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>

Спасибо!

1 Ответ

0 голосов
/ 13 января 2012

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

Эта запись в блоге описывает проблему и предлагает два обходных пути.Первый (с использованием класса ExtendedVisualStateManager) помог мне:

Использование Visual State Manager с дочерним элементом управления Windows Silverlight Toolkit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...