4

VisualStateManager を使用してプロパティに値を設定しようとしています。問題は、ネストされた要素 (variableSizedWrapGrid と呼ばれる) にこの値を設定する必要があることですが、対応する状態に応答しません。アイデアは、ユーザーがタブレットの向きを変更したとき (LANDSCAPE から PORTRAIT)、この要素の向きを変更する必要があるということです。

<GroupStyle.Panel>
    <ItemsPanelTemplate>
        <VariableSizedWrapGrid x:Name="variableSizedWrapGrid" Orientation="Vertical" Background="Blue" Width="660" ItemHeight="120" ItemWidth="220" Margin="0,0,80,0">

            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup>
                    <VisualState x:Name="FullScreenPortrait">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Orientation)">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="Horizontal" />
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>

        </VariableSizedWrapGrid>

    </ItemsPanelTemplate>
</GroupStyle.Panel>

Windows 8 用の Windows Metro アプリケーションを開発しています。

4

1 に答える 1

1

これが LayoutAwarePage の目的だと思います。基本クラスとして LayoutAwarePage があり、タブレットが回転したときにコントロールで VisualStates を切り替える場合は、コントロールの Loaded イベントを LayoutAwarePage の StartLayoutUpdates メソッドにフックします。

ご覧のとおり、状態が変化するたびに、「InvalidateVisualState」が実行され、LayoutUpdates を受け取るすべてのコントロールを通過し、手動で VisualStateManager を適切な状態に設定します。

したがって、そこにあるコードでは、ランドスケープの VisualState を設定する必要があります-これは FullScreenLandscape と呼ばれると思いますが、覚えていません-そして、VariableSizedWrapGrid コントロールの Loaded イベントに StartLayoutUpdates を追加します。これは、ページが LayoutAwarePage であると想定しています。正直なところ、これを行いたい場合は、そうする必要があります。このため、ボイラープレート コードがすべて含まれています。

それが役立つことを願っています。

于 2012-06-06T20:14:05.443 に答える