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;
}
});
}