3

以下のように方向プロパティを変更したい:

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

そして、デバイスの向きが変わったときにそれを機能させたいのですが、向きのプロパティも変更に従う必要があります。しかし、コード ビハインドにボタンを追加して向きを垂直から水平に変更しても機能しません。

4

1 に答える 1

2

Orientationプロパティを変更しても、何らかの理由で機能しないようです。だからここに代替案があります。FlipViewItemsPanel

を複製する必要がありますFlipView。1 つは a を実装し、もう 1 つは a を実装しVertical VirtualizingStackPanelますHorizontal VirtualizingStackPanel

ページの でそれらを定義しますResources

<Page.Resources>
    <ItemsPanelTemplate x:Key="HorizontalItemsPanel">
        <VirtualizingStackPanel AreScrollSnapPointsRegular="True" Orientation="Horizontal" />
    </ItemsPanelTemplate>
    <ItemsPanelTemplate x:Key="VerticalItemsPanel">
        <VirtualizingStackPanel AreScrollSnapPointsRegular="True" Orientation="Vertical" />
    </ItemsPanelTemplate>
</Page.Resources>

次に、SimpleOrientationSensor電話の向きの変化を監視するために使用します。

private SimpleOrientationSensor _orientationSensor = SimpleOrientationSensor.GetDefault();

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;
            }
        });
}
于 2014-12-19T12:30:37.393 に答える