как уменьшить дублирование кода в моем меню навигации - PullRequest
0 голосов
/ 24 апреля 2019

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

  <customRenderes:NavigationImageButton Source="IconFAB"
                                          x:Name="NavigationImageButton"
                                          ItemTapped="NavigationImageButton_OnItemTapped"

                                AbsoluteLayout.LayoutFlags="PositionProportional"
                                AbsoluteLayout.LayoutBounds="1.0,1.0,-1,-1"
                                Margin="10"
                                Opacity="0.4"

Мне нужно преодолеть это дублирование кода, поэтому кто-нибудь может предложить способ сделать это

1 Ответ

2 голосов
/ 24 апреля 2019

Создайте ресурс шаблона в словаре ресурсов xaml, который вы импортируете в App.xaml:

<ResourceDictionary ... />
  <ControlTemplate x:Key="PageTemplate">
    <Grid>
      <!-- Any pages with content that use this template will display contents in this ContentPresenter -->
      <ContentPresenter />
      <!-- Add elements common to all pages, TemplateBinding looks at the code behind for properties on the page being displayed through this template -->
      <FloatingNavigationMenu Contents={TemplateBinding MenuContents} />
    </Grid>
  </ControlTemplate>
</ResourceDictionary>

Затем примените этот шаблон к своим страницам:

<ContentPage ControlTemplate={StaticResource PageTemplate}>
  ...
</ContentPage>

Если вы хотите, вы можете создать базовый класс страницы контента, и в конструкторе вы можете сделать:

public abstract class BasePage : ContentPage
{
  public BasePage()
  {      
    SetDynamicResource(ControlTemplateProperty, "PageTemplate");
  }
  ...
}

При этом к страницам, унаследованным от BasePage, автоматически будет применен шаблон. Возможно, вы захотите определить свои свойства, которые привязаны к NavigationMenu, в этом базовом классе страниц.

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