как уменьшить дублирование кода в моем навигационном меню

#xaml #xamarin.forms

#xaml #xamarin.формы #xamarin.forms

Вопрос:

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

   <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. @jason Как к этому, что вы говорите, вы можете объяснить это на примере

Ответ №1:

Создайте ресурс шаблона в словаре ресурсов 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>
  

При желании вы могли бы создать базовый класс contentpage, а в конструкторе вы могли бы сделать:

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

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

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

1. <Содержимое FloatingNavigationMenu={TemplateBinding MenuContents} /> что вы подразумеваете под этим FloatingNavigationMenu

2. Это просто тип, который я придумал, вы могли бы добавить туда свои пользовательские параметры:NavigationImageButton вместо этого и привязать его к свойствам BindableProperties на странице xaml.cs