【发布时间】:2016-02-24 23:53:06
【问题描述】:
我正在制作一个 UWP 应用程序,其中我需要为同一页面上的不同屏幕尺寸制作不同的动画。我想如果屏幕宽度小于 400 这个动画应该播放,如果屏幕宽度小于 720 应该播放其他动画。我如何在 C# 中为此编写代码。
【问题讨论】:
标签: c# windows animation visual-studio-2015 uwp
我正在制作一个 UWP 应用程序,其中我需要为同一页面上的不同屏幕尺寸制作不同的动画。我想如果屏幕宽度小于 400 这个动画应该播放,如果屏幕宽度小于 720 应该播放其他动画。我如何在 C# 中为此编写代码。
【问题讨论】:
标签: c# windows animation visual-studio-2015 uwp
您可以通过使用带有AdaptiveTrigger 的StateTriggers 属性在基于窗口大小的XAML 标记中创建声明性规则来获得所需的内容。例如:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<!-- VisualState to be triggered when window width is <400. -->
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Storyboard>
<Storyboard>
<!-- The animation you want to play. -->
</Storyboard>
</VisualState.Storyboard>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<!-- VisualState to be triggered when window width is >=400 and <720. -->
<AdaptiveTrigger MinWindowWidth="400" />
</VisualState.StateTriggers>
<VisualState.Storyboard>
<Storyboard>
<!-- The animation you want to play. -->
</Storyboard>
</VisualState.Storyboard>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<!-- VisualState to be triggered when window width is >=720. -->
<AdaptiveTrigger MinWindowWidth="720" />
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
...
</Grid>
【讨论】:
VisualState 和<AdaptiveTrigger MinWindowWidth="0" /> 中定义的动画将播放一次。但是如果将窗口宽度从 500 调整为 600,则不会有动画。
我认为您可以使用 SystemParameters.Workarea 或 System.Windows.Forms.WorkingArea。您可以通过任一方式访问 width 属性。
https://msdn.microsoft.com/en-us/library/system.windows.systemparameters.workarea.aspx
https://msdn.microsoft.com/en-us/library/system.windows.forms.screen.workingarea(v=vs.110).aspx
【讨论】: