2017-04-18 1 views
0

Ich arbeite am Erstellen verschiedener Layouts für meine App. Wenn die App im Querformat ausgeführt wird, möchte ich eine Karte auf einer Seite auf dem Bildschirm anzeigen können, aber keine Karte im Hochformat. Ich verwende VisualStateManager, um mir dabei zu helfen.C# UWP XAML Überprüfen, ob in XAML vorhanden ist

Ich brauche Code in C# auf dem Map-Steuerelement Ich habe "MyMap" genannt, aber wie kann ich das Bit des Codes nur ausführen, wenn die Karte vorhanden ist - mit anderen Worten gibt es eine Möglichkeit, die ich überprüfen kann wenn es in der XAML existiert?

Ohne die Karte wirft ein Code, der sich auf MyMap bezieht, natürlich einen Fehler auf - ist das der beste Weg, dies zu tun oder fehlt mir ein besserer Weg?

EDIT

ich ähnlich ein Ansatz bin mit dem nachstehend zu erarbeiten, welche Vorlage in Abhängigkeit von der MinWindowWidth verwendet werden soll. MyMap existiert also nur in der LargeTemplate usw.

<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

können Sie einige Code veröffentlichen, um zu zeigen, wie Sie VisualStatemanager verwendet, um dies zu erreichen? Versteckst du es einfach oder zerstörst du das Kartenobjekt? – erotavlas

+0

Habe gerade meinen Beitrag aktualisiert, um eine Technik zu zeigen, die ich anzupassen versuche. –

+0

Haben Sie das versucht? https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.visualtreehelper Erfordert Schleifen, durch Objekte, obwohl hier ein Beispiel ist http://blog.jerrynixon.com/2012/09 /how-to-access-named-control-inside-xaml.html – erotavlas

Antwort

1

Fügen Sie Ihrer VisualStateGroup einen x: Name hinzu, z. AdaptiveVisualStateGroup, nach, dass Sie für die Aktuellerstatus in Ihrem Code wie folgt überprüfen: AdaptiveVisualStateGroup.CurrentState

Wenn der Aktuellerstatus Große gleich oder was auch immer der Name ist Ihr Visual, wo Sie Ihre Karte haben, können Sie Führen Sie den Code, der MyMap verweist, sonst überspringen Sie es einfach

+0

Guter Vorschlag, aber Visual Studio wirft Fehler über "Der Name 'MyMap' existiert nicht im aktuellen Kontext" sobald ich das Map-Steuerelement in die Datenvorlage in Page.Resources verschiebe –

Verwandte Themen