Windows runtime WP8.1上的Flipview虚拟化StackPanel方向更改

Windows runtime WP8.1上的Flipview虚拟化StackPanel方向更改,windows-runtime,windows-phone,windows-phone-8.1,win-universal-app,flipview,Windows Runtime,Windows Phone,Windows Phone 8.1,Win Universal App,Flipview,我想更改方向属性,如下所示: <Style x:Key="FlipViewStyleV" TargetType="FlipView"> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <VirtualizingStackPanel AreScrollSnapPointsRegul

我想更改方向属性,如下所示:

<Style x:Key="FlipViewStyleV" TargetType="FlipView">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel AreScrollSnapPointsRegular="True" Orientation="Vertical" />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>


我想让它在设备方向改变时工作,方向属性也应该跟着改变。但是,当我在“代码隐藏”中添加一个按钮以将方向从垂直更改为水平时,它不起作用,有人知道吗?

看起来,更改
FlipView的
项目span的
方向
属性出于某种原因不起作用。所以这里有一个替代方案

您需要复制
FlipView
。一个将实现
垂直
虚拟化StackPanel
,另一个将实现
水平
虚拟化StackPanel

在页面的
资源中定义它们

<Page.Resources>
    <ItemsPanelTemplate x:Key="HorizontalItemsPanel">
        <VirtualizingStackPanel AreScrollSnapPointsRegular="True" Orientation="Horizontal" />
    </ItemsPanelTemplate>
    <ItemsPanelTemplate x:Key="VerticalItemsPanel">
        <VirtualizingStackPanel AreScrollSnapPointsRegular="True" Orientation="Vertical" />
    </ItemsPanelTemplate>
</Page.Resources>
在您订阅了其
OrientationChanged
事件后

 _orientationSensor.OrientationChanged += OrientationSensor_OrientationChanged;
在其回调中,只需相应地隐藏和显示
FlipView
s即可

private async void OrientationSensor_OrientationChanged(SimpleOrientationSensor sender, SimpleOrientationSensorOrientationChangedEventArgs args)
{
    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            switch (args.Orientation)
            {
                case SimpleOrientation.NotRotated:
                case SimpleOrientation.Rotated180DegreesCounterclockwise:
                    this.HorizontalFlipView.Visibility = Visibility.Visible;
                    this.VerticalFlipView.Visibility = Visibility.Collapsed;
                    break;
                case SimpleOrientation.Rotated90DegreesCounterclockwise:
                case SimpleOrientation.Rotated270DegreesCounterclockwise:
                    this.HorizontalFlipView.Visibility = Visibility.Collapsed;
                    this.VerticalFlipView.Visibility = Visibility.Visible;
                    break;
            }
        });
}

如果可见性有一点延迟,那么解决方案是完美的。
private async void OrientationSensor_OrientationChanged(SimpleOrientationSensor sender, SimpleOrientationSensorOrientationChangedEventArgs args)
{
    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            switch (args.Orientation)
            {
                case SimpleOrientation.NotRotated:
                case SimpleOrientation.Rotated180DegreesCounterclockwise:
                    this.HorizontalFlipView.Visibility = Visibility.Visible;
                    this.VerticalFlipView.Visibility = Visibility.Collapsed;
                    break;
                case SimpleOrientation.Rotated90DegreesCounterclockwise:
                case SimpleOrientation.Rotated270DegreesCounterclockwise:
                    this.HorizontalFlipView.Visibility = Visibility.Collapsed;
                    this.VerticalFlipView.Visibility = Visibility.Visible;
                    break;
            }
        });
}