我正在为我的应用程序构建不同的布局。如果应用在风景中运行,我希望能够在屏幕的一侧显示地图,但如果是纵向显示,则不显示地图。我使用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