私はWPFを初めて使用しているため、風景とポートレートビューをサポートする最適な方法を理解できません。私の選択肢は何ですか?WPFでの風景ビューとポートレートビューの両方をサポート
ポートレートビューでは、コントロールが風景とは完全に異なる位置に配置されます。
私はWPFを初めて使用しているため、風景とポートレートビューをサポートする最適な方法を理解できません。私の選択肢は何ですか?WPFでの風景ビューとポートレートビューの両方をサポート
ポートレートビューでは、コントロールが風景とは完全に異なる位置に配置されます。
もし私が何かを見逃しておらず、モバイルビューを意味するならば、bool
var(isLandscapeのようなもの)をViewModelに追加して、DataTemplate
を使用するかどうかを制御してください。トリガーやその他の方法で制御できます。
この質問にはさらに多くのタグが必要です。
ユニバーサルWindowsプラットフォームには、VisualState
が設定されている条件を指定できるAdaptiveTrigger
があります。スタイル設定ツールを使用すると、必要に応じてページのレイアウトを変更できます。
WPFにはこの機能はありませんが、VisualStateManager
をStoryboards
とし、SizeChanged
というイベントを使用すると、まったく同じことができます。あなたは二つのグループにVisualStateManager
を追加することができ、あなたのウィンドウのコンテンツのルート要素に
:コードビハインドあなたに今
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ApplicationViewStates">
<VisualState x:Name="Landscape"/>
<VisualState x:Name="Portrait">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty="SomeProperty"
Storyboard.TargetName="SomeElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="SomeValue"/>
</ObjectAnimationUsingKeyFrames>
...
</Storyboard>
</VisualState>
は、ワイヤアップすることができますWindow
さんSizeChanged
イベント:
this.SizeChanged += (s,e) =>
{
//some condition you want to use to distinguish landscape and portrait
if (Width < Height)
{
VisualStateManager.GoToState(this, "Portrait", false);
}
else
{
VisualStateManager.GoToState(this, "Landscape", false);
}
}
また、SizeChanged
イベントを使用してコード内のすべてを実行することもできますが、複数の状態がある場合は、最初にすべてのプロパティをデフォルトにリセットする必要があります。
this.SizeChanged += (s,e) =>
{
//reset all changed properties to default value here
...
//some condition you want to use to distinguish landscape and portrait
if (Width < Height)
{
//set properties for portrait
}
}
レイアウトは次のようになります - http://dotneteers.net/blogs/vbandi/archive/2009/12/29/no-more-magic-strings-with-visualstatemanager-gotostate.aspx VisualStateManager要素をビューのルート(通常はメイングリッド)に追加するだけです。 –