2017-04-18 48 views
0

我正在爲我的應用程序構建不同的佈局。如果應用在風景中運行,我希望能夠在屏幕的一側顯示地圖,但如果是縱向顯示,則不顯示地圖。我使用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> 
+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:名稱到您的VisualStateGroup例如。 AdaptiveVisualStateGroup,在這之後,你可以在你的代碼檢查在currentState這樣的: AdaptiveVisualStateGroup.CurrentState

如果在currentState等於或任何名稱是您的VisualState,你有你的地圖,你可以運行引用我的地圖的代碼,否則你只是跳過它

+0

好的建議,但一旦我將地圖控件移動到Page.Resources中的數據模板中,visual studio就會拋出關於「名稱'MyMap'在當前上下文中不存在」的錯誤 –