1

カスタム コントロールを作成し、ページが縦またはスナップの場合に異なるパディングを設定したいと考えています。ページは、次のビュー ステートのサポートを作成する LayoutAwarePage を継承していることに気付きました。

  • フルスクリーンランドスケープ
  • 満たされた
  • 全画面縦長
  • スナップ

新しいコントロールに同様のコードを追加する必要がありますか (コントロールから継承します)。そうでない場合、なぜ LayoutAwarePage はこれをしなければならないのですか? また、次の VisualStateManager をコントロールの ControlTemplate に貼り付けて、ページ レイアウトを尊重するようにすることはできますか、それとも簡単すぎますか。

<VisualStateGroup x:Name="ApplicationViewStates">
    <VisualState x:Name="FullScreenLandscape"/>
    <VisualState x:Name="Filled"/>
    <VisualState x:Name="FullScreenPortrait">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Padding">
                <DiscreteObjectKeyFrame KeyTime="0" Value="1,2,3,4"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
    <VisualState x:Name="Snapped">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Padding">
                <DiscreteObjectKeyFrame KeyTime="0" Value="5,6,7,8"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
</VisualStateGroup>

編集:コントロールはデフォルトでこれらの状態をサポートしていないようで、追加する必要があります。また、ButtonBase はこれらの状態をスタイルで使用しているため、これらの状態をサポートしているようにも見えます。

4

2 に答える 2

2

Windows 8 プロジェクト内のデフォルトの「詳細」ページを見ると、ページ上のイベントにサブスクライブすることが期待されていることがわかります。フリップビューの 内に次のものがありますItemTemplate

<FlipView.ItemTemplate>
    <UserControl Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates">
        <ScrollViewer x:Name="scrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}"
            <!-- "Child Controls Here" -->
                <VisualStateManager.VisualStateGroups>
                    <!-- "Visual states manuiplating the child controls above" -->
            </VisualStateManager.VisualStateGroups>
        </ScrollViewer>
    </UserControl>
</FlipView.ItemTemplate>
于 2012-12-11T09:02:37.283 に答える
1

ユーザー コントロールで行うことは、LayoutAwarePage を継承させることです。次に、コンテンツをグリッドに配置し、VisualStateGroup をこのグリッド内に移動します。これが役に立てば幸いです。

于 2012-10-05T15:09:08.700 に答える