Как я могу центрировать всплывающие элементы приложения оболочки Xamarin?

#c# #xaml #xamarin #xamarin.android #custom-renderer

#c# #xaml #xamarin #xamarin.android #пользовательская визуализация

Вопрос:

Я хотел бы настроить внешний вид всплывающего окна моего приложения оболочки Xamarin таким образом, чтобы его элементы располагались по вертикали. В документах Microsoft показано, как настроить некоторые аспекты самого всплывающего окна, но эти настройки не могут управлять его внешним видом, чтобы я мог изменить способ отображения элементов.

введите описание изображения здесь

Без заголовка всплывающего окна элементы располагаются поверх всплывающего окна, но мне нужно центрировать их вертикально в середине самого всплывающего окна.

Мой ShellItemRenderer.cs в настоящее время пуст, потому что я не понимаю, что мне нужно делать. В настоящее время у меня есть эти классы:

 internal class CustomShellRenderer : ShellRenderer {
   public CustomShellRenderer(Context context) : base(context) { }

   protected override IShellTabLayoutAppearanceTracker CreateTabLayoutAppearanceTracker(ShellSection shellSection) {
      return new TabLayoutAppearanceTracker(this);                
   }

   protected override IShellItemRenderer CreateShellItemRenderer(ShellItem shellItem) {
      return new CustomShellItemRenderer(this);
   }
}

public class CustomShellItemRenderer :ShellItemRenderer {
   public CustomShellItemRenderer(IShellContext shellContext) : base(shellContext) { }
}
 

Как вы можете видеть, они пусты, так как я не могу понять, какие изменения необходимо внести.

Ответ №1:

Вы можете использовать оболочку.ItemTemplate для настройки всплывающих элементов:

 <Shell.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.2*" />
                <ColumnDefinition Width="0.8*" />
            </Grid.ColumnDefinitions>
            <Image Source="{Binding Icon}"
                   Margin="5"
                   HeightRequest="45" />
            <Label Grid.Column="1"
                   Text="{Binding Title}"
                   FontAttributes="Italic"
                   HorizontalTextAlignment="Center"
                   VerticalTextAlignment="Center" /> 
        </Grid>
    </DataTemplate>
</Shell.ItemTemplate>
 

Вот результат:

введите описание изображения здесь

Вы также можете использовать оболочку.MenuItemTemplate для настройки внешнего вида MenuItem.

Комментарии:

1. Этот метод предназначен для стилизации элементов: мне нужно настроить сам всплывающий окно.

2. Что вы имеете в виду customize the flyout itself ? Не могли бы вы добавить картинку, чтобы было понятно? Вы можете настроить всплывающее окно в ItemTemplate и добавить туда элемент, который вы хотите.

3. @Pine Code хочет центрировать всплывающие элементы вертикально, а не горизонтально: «Мне нужно центрировать их вертикально в середине самого всплывающего окна».

4. @JackHua-MSFT да, вертикально.