2017-04-18 5 views
0

私のアプリケーション用に異なるレイアウトを作成する作業をしています。アプリがランドスケープで実行されている場合、私は画面上の片側に地図を表示できるようにしたいが、似顔絵の場合は地図を表示したくない。私はこれを行うのを助けるためにVisualStateManagerを使用しています。C#UWP XAMLがXAMLに存在するかどうかを確認します。

私はマップコントロール上でC#でいくつかのコードを実行する必要があります。「MyMap」という名前を付けましたが、地図が存在する場合にのみコードを実行できます。それがXAMLに存在する場合は?

地図がなければ、もちろんMyMapを参照するコードではエラーがスローされます。これが最善の方法ですか、より良い方法がないのですか?

EDIT

私はMinWindowWidthに応じて使用すべきかのテンプレート動作するように以下と同様のアプローチを使用しています。したがって、MyMapはLargeTemplateなどにしか存在しません。

<Page.Resources> 
    <DataTemplate x:Key="SmallTemplate"> 
     <Grid> 
      <Border Background="LightGray" Height="100" Width="100"> 
       <TextBlock Text="{Binding Text}" 
          FontSize="48" Foreground="Green" /> 
      </Border> 
     </Grid> 
    </DataTemplate> 
    <DataTemplate x:Key="LargeTemplate"> 
     <Grid> 
      <Border Background="LightGray" Height="200" Width="200"> 
       <TextBlock Text="{Binding Text}" 
          FontSize="48" Foreground="Green" /> 
      </Border> 
     </Grid> 
    </DataTemplate> 
</Page.Resources> 
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState x:Name="Small"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="0" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MyGridView.ItemTemplate" Value="{StaticResource SmallTemplate}" /> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="Large"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="720" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MyGridView.ItemTemplate" Value="{StaticResource LargeTemplate}" /> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    <GridView Name="MyGridView"/> 
</Grid> 
+0

これを実現するためにvisualstatemanagerをどのように使用したかを示すコードを投稿できますか?単純に隠しているのですか、マップオブジェクトを破壊/作成していますか? – erotavlas

+0

自分の投稿を更新して、私が適応しようとしている技術を示しています。 –

+0

これを試しましたか? https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.visualtreehelperオブジェクトを介してループする必要がありますが、ここでは例を挙げています。http://blog.jerrynixon.com/2012/09 /how-to-access-named-control-inside-xaml.html – erotavlas

答えて

1

x:NameをVisualStateGroupに追加します。その後あなたがこのようなあなたのコード内でcurrentStateのを確認することができAdaptiveVisualStateGroup、: AdaptiveVisualStateGroup.CurrentState

currentStateのは、あなたができる、または任意の名前はあなたのマップを持っているあなたのvisualSTATEのですが等しい場合MyMapを参照するコードを実行します。それ以外の場合はスキップします。

+0

良い提案ですが、ビジュアルスタジオは「マップのコントロールをPage.Resources内のデータテンプレートに移動すると、「MyMapは現在のコンテキストに存在しません」というエラーをスローしています –

関連する問題