Переключение между статической шириной и автоматической шириной с визуальными состояниями

У меня небольшая проблема с моим текущим приложением, касающимся визуальных состояний и автоматической / статической ширины.

В зависимости от визуального состояния StackPanel имеет ширину = «Авто» или ширину = «400». Blend сообщает мне, что я не могу анимировать между этими двумя значениями (и на самом деле я здесь не анимирую, а просто переключаюсь между полноэкранным видео и составным представлением). Теперь мне нужно провести явный тест и изменить ширину при изменении своего визуального состояния (через VisualStateManager-framework. Есть ли способ сделать это в XAML (через раскадровки), а не в коде?

Некоторые примеры кода того, что я делаю сегодня:

private void Trailer_OnFullScreenToggled(object sender, EventArgs e)
{
    var state = (Trailer.IsFullScreen() ? "Windowed" : "Fullscreen");

    // HACK: Done to get past the auto / px issue
    VisualsGrid.Width = Trailer.IsFullScreen() ? 400.0 : Double.NaN;

    VisualStateManager.GoToState(this, state, true);
}

Любая помощь будет принята с благодарностью!


person Kris Selbekk    schedule 27.02.2013    source источник


Ответы (1)


Значение «Авто» для ширины имеет псевдоним Double.NaN. Вот почему анимация терпит неудачу - она ​​не может выполнять интерполяцию к этому значению или от него.

Вы пробовали использовать анимацию по ключевым кадрам с дискретным ключевым кадром? Использование дискретной анимации по ключевым кадрам должно решить проблему, заключающуюся в том, что система анимации не может интерполировать в Double.NaN или из него, поскольку никакой интерполяции не происходит.

В настоящий момент я не сталкиваюсь со средой разработки, поэтому я не уверен, нужно ли вам использовать DoubleAnimationUsingKeyFrames с DiscreteDoubleKeyFrame и значением Double.NaN или StringAnimationUsingKeyFrames с DiscreteStringKeyFrame и значением Auto.

Это, конечно, не приведет к плавной анимации от фиксированной ширины до автоматического изменения размера, а вместо этого будет появляться между ними.

person dtm    schedule 27.02.2013
comment
Попа - это то, что я ищу =) Спасибо! - person Kris Selbekk; 28.02.2013