Связывание шаблонов содержимого App.xaml со страницами содержимого в Xamarin.Forms - PullRequest
0 голосов
/ 26 апреля 2020

Я создал шаблоны содержимого в App.xaml, содержащие текст заголовка и значок (поиск или календарь). Это пример моего шаблона поиска.

<ControlTemplate x:Key="SearchTemplate">
                <StackLayout>
                    <!-- Header -->
                    <StackLayout x:Name="TitleView"  Padding="8,8" Grid.Row="1" HeightRequest="48"
                         BackgroundColor="{DynamicResource AppBlueColor}" Spacing="0"
                         HorizontalOptions="FillAndExpand" Orientation="Horizontal">

                    <StackLayout x:Name="Title" HorizontalOptions="FillAndExpand"  IsVisible="True"
                             Orientation="Horizontal"  VerticalOptions="FillAndExpand"  Spacing="0">

                    <!--   Header Text Title  -->
                    <Label  Margin="16,0" FontFamily="{StaticResource Montserrat-Medium}" FontSize="16"
                            HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource Gray-White}"
                            LineHeight="1.25"  Text="{TemplateBinding BindingContext.HeaderText}"  VerticalOptions="Center" VerticalTextAlignment="Center" />

                    </StackLayout>
                    <StackLayout  x:Name="Search" HorizontalOptions="EndAndExpand" IsVisible="False"
                                Orientation="Horizontal" Spacing="0">

                        <!--  Back to title layout  -->
                        <buttons:SfButton x:Name="BackToTitle" Command="{TemplateBinding BackToTitleClickedCommand}"  Text="{StaticResource Back}"
                                          Style="{StaticResource NavigationBarButtonStyle}" WidthRequest="38" HeightRequest="38"
                                          CornerRadius="4" Padding="0"/>

                        <!--  Rounded Search Entry  -->
                        <border:SfBorder Style="{StaticResource SfBorderStyle}">
                            <controls:BorderlessEntry x:Name="SearchEntry"
                                                      Text="Enter Search" Placeholder="Search here"
                                                      HorizontalOptions="FillAndExpand"  Style="{StaticResource SearchEntryStyle}"/>
                        </border:SfBorder>
                    </StackLayout>

                <!--  Search Button  -->
                <buttons:SfButton  x:Name="SearchButton" IsVisible="True" Command="{TemplateBinding SearchButtonClickedCommand}" Style="{StaticResource IconButtonStyle }"
                                   Text="{StaticResource Search}" />
                </StackLayout>

            <!-- Content -->
            <StackLayout>
                <ContentPresenter />
            </StackLayout>

            </StackLayout>
            </ControlTemplate>

Для каждой страницы содержимого, использующей этот шаблон ControlTemplate, мне нужно написать собственный BackToTitleClickedCommand и SearchButtonClickedCommand. Как привязать кнопку BackToTitle и SearchEntry к странице содержимого, чтобы я мог написать эти команды?

В модели представления моей страницы у меня есть следующее:

public Command SearchButtonClickedCommand
    {
        get;
        set;
    }
    public Command BackToTitleClickedCommand
    {
        get;
        set;
    }
    public CountriesGroupViewModel()
    {
        SearchButtonClickedCommand = new Command(() => ExecuteSearchButtonClickedCommand());
        BackToTitleClickedCommand = new Command(() => ExecuteBackToTitleClickedCommand());
    }

Кроме того, в эти команды мне нужно обновить кнопку BackToTitle и атрибуты SearchEntry. Однако они определены в App.xaml, поэтому не совсем уверены, как связать их на отдельной странице содержимого.

private void ExecuteDateButtonClickedCommand()
    {
        //need to alter Search Button Attributes
        this.SearchButton.IsVisible = false;
        ...
    }

    private void ExecuteBackToTitleClickedCommand()
    {
        //similar to above
    }

Прошу прощения, если это тривиально, только начал изучать мобильную разработку.

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