0

Metroアプリの全画面表示にStackPanel3つの赤い要素が含まれています。Grid

前:
全画面表示

アプリケーションがスナップ状態に変更されたときに、Styleすべての子のを動的に変更して、子が青に設定され、Nピクセルに設定されるようにする適切な方法は何ですか?GridBackgroundHeight

後:
スナップ

4

1 に答える 1

2

WinRT XAMLでは、実行時にスタイルを変更できますが、変更はそのスタイルの既存の要素に反映されません。要素に割り当てられたスタイルを変更することはできますが、スタイルを変更することはできません。したがって、スタイルをクリア/リセットすると要素が変更されますが、スタイルを変更して自動的に調整することはできません。

グリッドが多すぎない場合は、LayoutAwarePage(VS / Blend Metroテンプレートの一部)から開始し、ApplicationViewStatesに割り当てられたVisualStateで、必要に応じて各グリッドを調整するのが最も簡単です。新しいスタイルやサイズ、または好きなものを適用できます。それはかなり簡単です。

または、さまざまな状態が定義されたリソースを作成することもできます。グリッドが配置されているページで、Loadedイベントを基本クラス(LayoutAwarePage)のパブリックStartLayoutUpdatesメソッドに接続できるはずです。

これにより、このような状態を利用できるようになります。ただし、これらはグリッド上で定義する必要があります。これは面倒な(そして実用的でない)可能性があります。この時点で、グリッドインスタンスを含み、そこに状態を適用するテンプレートコントロール(またはUserControl)に切り替える方がよいでしょう。

<VisualStateGroup x:Name="ApplicationViewStates">
    <VisualState x:Name="FullScreenLandscape"/>
    <VisualState x:Name="Filled"/>
    <VisualState x:Name="FullScreenPortrait" />
    <!-- etc ...->
</VisualStateGroup>

または、コントロールを作成し、ウィンドウのサイズ変更/レイアウトイベントを手動で接続して、同じ作業を行うことができます。基本的には同じです(ロジックを配置する場所によって異なります)。

于 2012-09-11T01:40:39.827 に答える