2017-04-18 30 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'在当前上下文中不存在”的错误 –