8

各セル内に 2 行、2 列、および多くのコントロールを含むグリッドがあるとします。

アプリケーションがスナップ モードに変更された場合、画面の 1/3 を意味し、アプリケーションを 1 列、2 行のみにして、決定したいくつかのコントロールのみを表示したいと考えています。

これに対してどのような制御ができますか?

どうも

4

3 に答える 3

10

完全な xaml ソリューションを得るには、xaml で VisualStateManager を使用する必要があります。

<Grid x:Name="LayoutRoot">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="OrientationStates">
            <VisualState x:Name="Full"/>
            <VisualState x:Name="Fill"/>
            <VisualState x:Name="Portrait"/>
            <VisualState x:Name="Snapped"/>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

VisualState ごとに StoryBoard を作成し、xaml で要素を非表示/表示します。Microsoft の例では、同じソリューションを使用しています。

--

アップデート

私はネットを検索し、適切な州を見つけました。例はこのリンクの背後にあります: MSDN

 <VisualStateManager.VisualStateGroups>
     <VisualStateGroup x:Name="ApplicationViewStates">
        <VisualState x:Name="FullScreenLandscape"/>
        <VisualState x:Name="Filled"/>
        <VisualState x:Name="FullScreenPortrait"/>
        <VisualState x:Name="Snapped"/>
    </VisualStateGroup>
 </VisualStateManager.VisualStateGroups>

状態はApplicationViewState列挙を反映します。詳細については、こちらをご覧ください

于 2012-06-11T11:59:57.980 に答える
9

DisplayProperties.OrientationChangedイベントの使用(@Jan K. の提案による) は、このイベントのコメント セクションを考慮すると、まさに探しているものではない可能性があります。

DisplayProperties.OrientationChangedイベントは、ディスプレイまたはモニターの向きが変更された場合にのみ発生し、必ずしもアプリの向きが変更された場合に発生するわけではありません。レイアウト目的でアプリの向きを決定するには、ApplicationView.Valueプロパティを使用します。

ただし、Windows 8.1のリリース後にApplicationView.Valueはおそらく放棄されるため、MS は代わりにApplicationView.GetForCurrentView()を使用することを提案しています。

Windows 8.1 プレビュー以降のリリースでは、ApplicationView の静的メソッドが変更されるか、使用できなくなる可能性があります。代わりに、ApplicationView.GetForCurrentView()を使用して ApplicationView のインスタンスを取得します。

だから今のところ、私はそのコードに行き着きました(一種の動的ビューがあり、残念ながらVisualStateManagerを介してXAMLですべてを事前に設計することはできません):

public MainPage()
{
    InitializeComponent();
    Window.Current.SizeChanged += (sender, args) =>
    {
        ApplicationView currentView = ApplicationView.GetForCurrentView();

        if (currentView.Orientation == ApplicationViewOrientation.Landscape)
        {
            // when args.Size.Width > args.Size.Height
        }
        else if (currentView.Orientation == ApplicationViewOrientation.Portrait)
        {
            // when args.Size.Width < args.Size.Height
        }
    };
}
于 2013-08-07T16:42:33.177 に答える
8

-イベントをご覧くださいDisplayProperties.OrientationChanged。起動すると、グリッドを変更してコントロールを再配置できます。

于 2012-06-11T11:58:07.650 に答える