Я создал страницу, которая принимает некоторые данные о местоположении (включая Lat/Long), а затем отображает карту и детали для этого. С кодом он отображает пользовательский интерфейс в Android-эмуляторе. При попытке сделать это в XAML я не могу заставить его отображаться правильно - несмотря на попытку скопировать код в XAML как можно лучше.Xamarin Xaml StackLayout over Map
Код:
public class TestDetailPage : ContentPage
{
public TestDetailPage(TripLogEntry entry) {
Title = "Entry Details";
var mainLayout = new Grid
{
RowDefinitions = {
new RowDefinition { Height = new GridLength (4, GridUnitType.Star) },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = new GridLength (1, GridUnitType.Star) }}
};
var map = new Map();
// Center the map around the log entry's location
map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(entry.Latitude, entry.Longitude), Distance.FromMiles(.5)));
// Place a pin on the map for the log entry's location
map.Pins.Add(new Pin
{
Type = PinType.Place,
Label = entry.Title,
Position = new Position(entry.Latitude, entry.Longitude)
});
var title = new Label
{
HorizontalOptions = LayoutOptions.Center
};
title.Text = entry.Title;
var date = new Label
{
HorizontalOptions = LayoutOptions.Center
};
date.Text = entry.Date.ToString("M");
var rating = new Label
{
HorizontalOptions = LayoutOptions.Center
};
rating.Text = $"{entry.Rating} star rating";
var notes = new Label
{
HorizontalOptions = LayoutOptions.Center
};
notes.Text = entry.Notes;
var details = new StackLayout
{
Padding = 10,
Children = { title, date, rating, notes }
};
var detailsBg = new BoxView
{
BackgroundColor = Color.White,
Opacity = .8
};
mainLayout.Children.Add(map);
mainLayout.Children.Add(detailsBg, 0, 1);
mainLayout.Children.Add(details, 0, 1);
Grid.SetRowSpan(map, 3);
Content = mainLayout;
}
}
Это делает как: Map when using code
С XAML ниже он делает, как показано:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TripLog.Pages.DetailPage" Title="Entry Details"
xmlns:map="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="4*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<map:Map x:Name="DetailMap" Grid.RowSpan="3" />
<BoxView x:Name="DetailsBG" BackgroundColor="Color.White" Grid.Row="0" Grid.Column="1" />
<StackLayout Padding="10" Grid.Row="0" Grid.Column="1">
<Label x:Name="EntryTitle" />
<Label x:Name="EntryDate" />
<Label x:Name="EntryRating" />
<Label x:Name="EntryNotes" />
</StackLayout>
</Grid>
</ContentPage.Content>
</ContentPage>
Как вы можете видеть, я попытался скопировать код в XAML, но безрезультатно. Пожалуйста, можете ли вы помочь получить один и тот же рендеринг пользовательского интерфейса, когда это делается в коде для XAML?
Спасибо в продвижении.
Это работало. Большое спасибо за это Джейсон. Я получал Grid.Row = "1" Grid.Column = "0", смешанный в XAML. –