xaml - Windows 10 - 视觉状态更改的转换

标签 xaml windows-runtime windows-10 win-universal-app windows-10-universal

我正在尝试通过使用视觉状态触发器来更改网格的宽度,使我的 Windows 10 应用程序利用响应式设计。当状态改变时,宽度跳到下一个宽度。

有没有办法通过某种过渡或动画来平滑这种变化?

<VisualStateManager.VisualStateGroups>
     <VisualStateGroup>
         <VisualState x:Name="DesktopWideState">
             <VisualState.StateTriggers>
                 <AdaptiveTrigger MinWindowWidth="1280" />
             </VisualState.StateTriggers>

             <VisualState.Setters>
                 <Setter Target="ContentPanel.Width"
                    Value="1000" />
             </VisualState.Setters>
         </VisualState>

        <VisualState x:Name="DefaultState">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="0" />
            </VisualState.StateTriggers>
         </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

最佳答案

VisualState 确实包含属性 Storyboard,因此确实可以基于 StateTriggers 创建基于 Storyboard 的动画。

VisualState.Setters 的引入是为了消除 Storyboard 中 ObjectAnimationUsingKeyFrames 创建的噪音。

要向示例添加动画,请使用以下命令:

<VisualStateManager.VisualStateGroups>
  <VisualStateGroup>
    <VisualState x:Name="DesktopWideState">
      <VisualState.StateTriggers>
        <AdaptiveTrigger MinWindowWidth="1280" />
      </VisualState.StateTriggers>
      <VisualState.Storyboard>
        <Storyboard>
          <DoubleAnimation Storyboard.TargetName="ContentPanel" Storyboard.TargetProperty="Width" Duration="0:0:0.5" To="1000" EnableDependentAnimation="True" />
        </Storyboard>
      </VisualState.Storyboard>
    </VisualState>
</VisualStateManager.VisualStateGroups>

不要使用这个例子!为什么?

因为通过动画宽度会影响布局。这就是为什么默认情况下动画处于禁用状态,并且只能通过将 EnabledDependentAnimation 设置为 true 才能发挥作用。您会看到,这个动画会很卡顿。

尽量避免依赖动画,并仅在 AdaptiveTriggers 中为独立动画(如变换)使用 Storyboard。

关于xaml - Windows 10 - 视觉状态更改的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31227381/

相关文章:

c# - Windows Phone定时重复方法(类似IOS中的NSTimer)

c# - 从 C# 使用 C++/WinRT 组件

c++ - Windows 10:Pen(手写笔)在MFC应用程序上不起作用

vb.net - 如何在 Windows 10 的音量控制上显示您的媒体播放器程序

batch-file - Windows 10 命令。使用IF GEQ进行比较,得到不好的结果

c# - 在 UWP 中检测空闲用户

WPF (MVVM) : Wiring up viewModel to view in code-behind of Window?

c# - xamarin forms 如何将枚举值传递给 XAML 并在 switch 语句中使用它?

c++ - Zxing C++ 出现 LNK2005 错误

c# - System.Environment.TickCount 的 WinRT 替换