C#UWP XAML检查XAML中是否存在

时间:2017-04-18 17:14:24

标签: c# xaml uwp

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

1 个答案:

答案 0 :(得分:1)

将一个x:Name添加到VisualStateGroup,例如。 AdaptiveVisualStateGroup ,之后您可以在代码中检查CurrentState,如下所示: AdaptiveVisualStateGroup.CurrentState

如果CurrentState等于 Large 或者您的地图所在的VisualState名称,您可以运行引用 MyMap 的代码,否则您只需跳过它< / p>