私のアプリケーション用に異なるレイアウトを作成する作業をしています。アプリがランドスケープで実行されている場合、私は画面上の片側に地図を表示できるようにしたいが、似顔絵の場合は地図を表示したくない。私はこれを行うのを助けるために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>
これを実現するためにvisualstatemanagerをどのように使用したかを示すコードを投稿できますか?単純に隠しているのですか、マップオブジェクトを破壊/作成していますか? – erotavlas
自分の投稿を更新して、私が適応しようとしている技術を示しています。 –
これを試しましたか? 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