我是WPF新手,无法找到支持横向和纵向视图的最佳方式。我有什么选择?
纵向视图的控制位置与横向完全不同。
答案 0 :(得分:0)
如果我没有错过任何内容而你的意思是“移动视图”,只需在ViewModel中添加一个新的bool
var(类似于isLandscape)来控制将使用哪个DataTemplate
。您可以使用触发器或任何其他方式控制它。
我猜你需要更多这个问题的标签。
答案 1 :(得分:0)
通用Windows平台有一个AdaptiveTrigger
,可让您指定将在哪些条件下设置给定的VisualState
。使用样式设置器,您可以更改页面布局以满足您的需求。
WPF没有此功能,但您可以使用VisualStateManager
与Storyboards
和SizeChanged
事件非常密切地模仿它。
对于窗口内容的根元素,您可以添加两个组VisualStateManager
:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ApplicationViewStates">
<VisualState x:Name="Landscape"/>
<VisualState x:Name="Portrait">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty="SomeProperty"
Storyboard.TargetName="SomeElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="SomeValue"/>
</ObjectAnimationUsingKeyFrames>
...
</Storyboard>
</VisualState>
现在在代码隐藏中,你可以连接Window
的{{1}}事件:
SizeChanged
或者,您可以使用this.SizeChanged += (s,e) =>
{
//some condition you want to use to distinguish landscape and portrait
if ( Width < Height )
{
VisualStateManager.GoToState(this, "Portrait", false);
}
else
{
VisualStateManager.GoToState(this, "Landscape", false);
}
}
事件再次执行代码中的所有操作,但在这种情况下,如果您有多个状态,则需要首先将每个属性重置为其默认值:
SizeChanged