Laden...

[Erledigt] Map-Höhe mit der Auflösung skalieren

Erstellt von Chierd vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.597 Views
C
Chierd Themenstarter:in
7 Beiträge seit 2016
vor 7 Jahren
[Erledigt] Map-Höhe mit der Auflösung skalieren

Hallöchen,

ich arbeite im Moment privat an einer UWP-App. Ich würde gerne meine Map, die auf https://xamlmapcontrol.codeplex.com basiert, entsprechend der freien Fläche skalieren lassen. D.h. die Map soll die max. verfügbare Fläche erhalten, egal wo (Windows 10 Mobile / Windows 10 Desktop).


<StackPanel>
     <mapControl:Map x:Name="Map" Margin="10,10,10,10" VerticalAlignment="Stretch" Height="{Binding Height}">
                 ...
     </mapControl:Map>
     <Grid x:Name="BottomBar" >
            <CommandBar ClosedDisplayMode="Compact" Background="White" Height="60">
                   ....
            </CommandBar>
     </Grid>
</StackPanel>


public double Height
        {
           return App.ScreenResolutionSize.Height - 110;
             
        } 

Bisher habe ich es mit dem Code gelöst, aber es dürfte doch sicherlich eine Möglichkeit geben, dass dies nur in XAML lösbar wäre.

Ich hatte auch schon an Grid mit Rowdefinitionen gedacht, aber es hat nicht funktioniert.

709 Beiträge seit 2008
vor 7 Jahren

Hi Chierd,

Ich hatte auch schon an Grid mit Rowdefinitionen gedacht, aber es hat nicht funktioniert.

Genau das sollte aber funktionieren.
Wenn du deine RowDefinitionen so wählst, dass die Row, in der die deine CommandBar ist, Height="Auto" hat und die Row, in der die Karte ist, keine Height bzw. Height="*" zugewiesen bekommt.

C
Chierd Themenstarter:in
7 Beiträge seit 2016
vor 7 Jahren

Hallöchen,

ich habe das jetzt auch mit den RowDefintions drin:


<Grid Background="#19000000" >
    <Grid.RowDefinitions>
        <!-- Map Row -->
        <RowDefinition Height="*" />
        <!--  CommandBar Row  -->
        <RowDefinition Height="60"/>
    </Grid.RowDefinitions>
    <mapControl:Map x:Name="Map" Margin="10,10,10,10" VerticalAlignment="Stretch" Grid.Row="0">
                    ...
    </mapControl:Map>

    <Grid x:Name="BottomBar" Grid.Row="1" Height="Auto">
        <CommandBar ClosedDisplayMode="Compact" Background="White" Height="60">
                    ...
        </CommandBar>
    </Grid>
</Grid>

Allerdings sieht man die Map nicht, wie auf dem Bild ersichtlich ... daher hatte ich vorerst mit dem Code gelöst, damit die Map überhaupt sichtbar wird

742 Beiträge seit 2005
vor 7 Jahren

Bist du sicher, dass dein äußeres Grid die volle Höhe hat?

C
Chierd Themenstarter:in
7 Beiträge seit 2016
vor 7 Jahren

Ok, dass hatte ich nicht bedacht danke 😃 ...

Aber so gesehen muss ich jetzt die Höhe vom Gerät erfahren und entsprechend setzen. ... Gibt es keine andere Lösung die dies verhindert, also dass die XAML quasi automatisch die aktuelle Höhe erfährt, ohne dass ich in C# eine Zeile Code schreiben muss? --- Ist zwar kein Problem, aber eine "reine" XAML-Lösung würde ich bevorzugen. Sowas habe ich bisher nicht so wirklich gefunden ...

D
985 Beiträge seit 2014
vor 7 Jahren

Also ich habe kein Problem dieses MapControl automatisch füllen zu lassen.

Es muss an dem XAML Teil liegen, den du uns nicht zeigst. (Liegt das Grid etwa in einem StackPanel?)

C
Chierd Themenstarter:in
7 Beiträge seit 2016
vor 7 Jahren

Richtig, das liegt in einem StackPanel ...

<StackPanel Background="White">     
        <controls:PageHeader x:Name="pageHeader" Frame="{x:Bind Frame}"
                             RelativePanel.AlignLeftWithPanel="True"
                             RelativePanel.AlignRightWithPanel="True"
                             RelativePanel.AlignTopWithPanel="True" Text="Routing Details" />

Das kommt noch davor ....

Btw: Ich verwende Template10 ....

5.658 Beiträge seit 2006
vor 7 Jahren

Hi Chierd,

für deinen Anwendungsfall verwendest du das falsche Panel-Element. Verwende statt dem StackPanel ein Grid, dann sollte es funktionieren. Hier gibt es eine Übersicht über das Layout in WPF.

Weeks of programming can save you hours of planning

C
Chierd Themenstarter:in
7 Beiträge seit 2016
vor 7 Jahren

Merci MrSparkle 😃
Das war die Lösung. Hatte nicht an diese Kombination gedacht 😃