Как добавить вид сетки на странице деталей Master-Detail в формах Xamarin? - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь добавить вид сетки в нижней части экрана, содержащий информацию «Текущее воспроизведение» о медиафайле, воспроизводимом в медиаплеере. Проблема в том, что я хочу, чтобы это представление было там, независимо от того, какая страница видна.

Основной макет - это страница Master-Detail для панели меню навигации, где страница сведений должна содержать все.

Страница сведений может быть страницей содержимого, страницей навигации (в основном) или страницей модального содержимого. Однако, если бы я мог выбрать только один, я бы выбрал его как страницу навигации.

Итак, я просто хочу сделать что-то , например this:

<MasterDetailPage.Detail>
        <ContentPage>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="auto"/>
                </Grid.RowDefinitions>

                <Page x:Name="viewPort" Grid.Row="0">
                    <!--This page source is dynamically set from the code behind...-->
                </Page>

                <Grid Grid.Row="2">
                    <!--Here should be the rest of my grid structure...-->
                </Grid>
            </Grid>
        </ContentPage>
</MasterDetailPage.Detail>

Но перенос страницы в другое представление / страницу невозможен, я также попытался изменить шаблон элемента управления страницы Master-Detail, чтобы добавить эту сетку внизу страницы сведений и отобразить любую страницу над ней, но не повезло в поиске оригинала шаблон или даже настройка шаблона для макета Master-Detail ...

Я новичок в Xamarin, но немного разбираюсь в c# и xaml, любая помощь действительно приветствуется.

1 Ответ

1 голос
/ 30 марта 2020

Вы можете использовать ContentPresenter с шаблоном элемента управления.

Создать шаблон элемента управления в App.xaml> Application.Resources> ResourceDictionary.

  <!--  Grid Template -->
        <ControlTemplate x:Key="GridTemplate">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <ContentPresenter Grid.Row="0" />
                <Label
                    Grid.Row="1"
                    BackgroundColor="Accent"
                    Text="Grid Template" />
            </Grid>
        </ControlTemplate> 

И затем использовать его на странице сведений. .

ControlTemplate="{StaticResource GridTemplate}"

enter image description here

Я загрузил проект на GitHub для ознакомления. https://github.com/WendyZang/Test/tree/master/ControlTemplate_ContentPresenter/MasterDetailPageDemo

Обновлено:

Для привязки данных шаблона управления можно использовать TemplateBinding.

Создать a AppViewModel:

 public class AppViewModel
{
    public string Name { get; set; } = "Name_A";

    public AppViewModel()
    {

    }
}

Приложение. xml:

   <ControlTemplate x:Key="GridTemplate">

            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>

                <ContentPresenter Grid.Row="0"  />
                <Label Grid.Row="1" BackgroundColor="Accent" Text="{TemplateBinding BindingContext.Name}" />

            </Grid>
        </ControlTemplate>

Установите привязку на каждой странице, использующей шаблон элемента управления.

  this.BindingContext = new AppViewModel();

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...