2016-11-24 5 views

答えて

0

もし私が何かを見逃しておらず、モバイルビューを意味するならば、bool var(isLandscapeのようなもの)をViewModelに追加して、DataTemplateを使用するかどうかを制御してください。トリガーやその他の方法で制御できます。

この質問にはさらに多くのタグが必要です。

0

ユニバーサルWindowsプラットフォームには、VisualStateが設定されている条件を指定できるAdaptiveTriggerがあります。スタイル設定ツールを使用すると、必要に応じてページのレイアウトを変更できます。

WPFにはこの機能はありませんが、VisualStateManagerStoryboardsとし、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 
    } 
} 
+0

とすべての子をノードにコピーしますか? – rukiman

+0

レイアウトは次のようになります - http://dotneteers.net/blogs/vbandi/archive/2009/12/29/no-more-magic-strings-with-visualstatemanager-gotostate.aspx VisualStateManager要素をビューのルート(通常はメイングリッド)に追加するだけです。 –

関連する問題