0

我当前的应用程序有一个小问题,处理视觉状态和自动/静态宽度。

根据视觉状态,aStackPanel要么具有宽度 =“自动”,要么具有宽度 =“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);
}

任何帮助将不胜感激!

4

1 回答 1

1

宽度的“Auto”值别名为 Double.NaN。这就是动画失败的原因——它不能对该值进行插值或从该值进行插值。

您是否尝试过使用带有离散关键帧的关键帧动画?使用离散关键帧动画应该可以解决动画系统无法插值到 Double.NaN 或从 Double.NaN 插值的问题,因为不会发生插值。

我目前不在开发环境面前,所以我不确定您是否需要使用具有 DiscreteDoubleKeyFrame 和 Double.NaN 值的 DoubleAnimationUsingKeyFrames 或具有 DiscreteStringKeyFrame 和 Auto 值的 StringAnimationUsingKeyFrames。

当然,这不会从固定宽度到自动调整大小的平滑动画,而是会在两者之间弹出。

于 2013-02-27T17:02:05.237 回答