我正在为我的应用构建不同的布局。如果应用程序在横向上运行,我希望能够在屏幕的一侧显示地图,但如果在纵向中则不显示地图。我正在使用VisualStateManager来帮助我做到这一点。
我需要在地图控件上运行c#中的一些代码,我将其命名为“MyMap”,但是如果只有地图出现时我怎么才能运行代码 - 换句话说,有一种方法可以检查是否它存在于XAML中?
如果没有地图,任何引用MyMap的代码都会引发错误 - 这是解决这个问题的最佳方式还是我错过了更好的方法?
修改
我正在使用类似于下面的方法来确定应该使用哪个模板,具体取决于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>
答案 0 :(得分:1)
将一个x:Name添加到VisualStateGroup,例如。 AdaptiveVisualStateGroup ,之后您可以在代码中检查CurrentState,如下所示: AdaptiveVisualStateGroup.CurrentState
如果CurrentState等于 Large 或者您的地图所在的VisualState名称,您可以运行引用 MyMap 的代码,否则您只需跳过它< / p>