支持WPF中的横向和纵向视图

时间:2016-11-24 05:44:33

标签: c# wpf

我是WPF新手,无法找到支持横向和纵向视图的最佳方式。我有什么选择?

纵向视图的控制位置与横向完全不同。

2 个答案:

答案 0 :(得分:0)

如果我没有错过任何内容而你的意思是“移动视图”,只需在ViewModel中添加一个新的bool var(类似于isLandscape)来控制将使用哪个DataTemplate。您可以使用触发器或任何其他方式控制它。

我猜你需要更多这个问题的标签。

答案 1 :(得分:0)

通用Windows平台有一个AdaptiveTrigger,可让您指定将在哪些条件下设置给定的VisualState。使用样式设置器,您可以更改页面布局以满足您的需求。

WPF没有此功能,但您可以使用VisualStateManagerStoryboardsSizeChanged事件非常密切地模仿它。

对于窗口内容的根元素,您可以添加两个组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