Metroアプリの全画面表示にStackPanel
3つの赤い要素が含まれています。Grid
前:
アプリケーションがスナップ状態に変更されたときに、Style
すべての子のを動的に変更して、子が青に設定され、Nピクセルに設定されるようにする適切な方法は何ですか?Grid
Background
Height
後:
Metroアプリの全画面表示にStackPanel
3つの赤い要素が含まれています。Grid
前:
アプリケーションがスナップ状態に変更されたときに、Style
すべての子のを動的に変更して、子が青に設定され、Nピクセルに設定されるようにする適切な方法は何ですか?Grid
Background
Height
後:
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>
または、コントロールを作成し、ウィンドウのサイズ変更/レイアウトイベントを手動で接続して、同じ作業を行うことができます。基本的には同じです(ロジックを配置する場所によって異なります)。