我正在爲我的應用程序構建不同的佈局。如果應用在風景中運行,我希望能夠在屏幕的一側顯示地圖,但如果是縱向顯示,則不顯示地圖。我使用VisualStateManager來幫助我做到這一點。C#UWP XAML檢查是否存在於XAML
我需要在地圖控件的c#中運行一些代碼我已經命名爲「MyMap」,但是如何才能讓代碼的這一點僅在地圖存在時運行 - 換句話說,我可以檢查如果它存在於XAML中?
沒有地圖任何引用MyMap的代碼當然會拋出一個錯誤 - 這是去解決這個問題的最好方法還是我錯過了一個更好的方法?
編輯
我使用類似下面的方法來制定出應視MinWindowWidth用什麼模板。所以我的地圖將只存在於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