Как отобразить элементы GUI из производного XAML тоже? - PullRequest
0 голосов
/ 09 июня 2019

Мне удалось наследовать от класса ContentPage, производный класс называется SubContentPage.
Он содержит некоторые элементы шаблона (кнопка и заголовок). У меня есть два класса FilterPage и SettingsPage, которые наследуются от SubContentPage. Когда я отображаю одну из этих производных страниц, я вижу только содержимое графического интерфейса SubContentPage, хотя когда FilterPage и SettingsPage унаследованы от ContentPage ранее, это работало. Так что мой код GUI не является неправильным.

Моя идея заключалась в том, что SubContentPage и производные классы не используют один и тот же контент, где появляются графические элементы управления. Таким образом, производные элементы GUI игнорируются. Я пытался использовать для классов SubContentPage и FilterPage одно и то же имя StackLayout. Но это не сработает.

SubContentPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="solna_app.GUI.Pages.SubContentPage">
    <ContentPage.Content>
        <StackLayout>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Image x:Name="BackIcon" HorizontalOptions="Start" 
                    Grid.Row="0" />
                <Label x:Name="TitleLabel" HorizontalOptions="Center"
                    FontSize="Large" FontAttributes="Bold"
                    TextColor="Black" Grid.Row="0" />
            </Grid>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

FilterPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<d:SubContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="clr-namespace:solna_app.GUI.Pages;assembly=solna_app"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="solna_app.GUI.Pages.FilterPage">
    <d:SubContentPage.Content>
        <StackLayout>
            <Label  x:Name="SearchLabel" Text="Search keyword" 
                TextColor="Black" FontSize="Large" Margin="10,10,0,0" />
            <Editor x:Name="SearchEditor" Placeholder="Type a keyword"
                PlaceholderColor="Gray" Margin="10,10,10,0"
                HorizontalOptions="CenterAndExpand"/>
        </StackLayout>
    </d:SubContentPage.Content>
</d:SubContentPage>

Я ожидаю, что отображаются элементы управления пользовательского интерфейса SubContentPage И элементы управления пользовательского интерфейса производного класса.

1 Ответ

0 голосов
/ 10 июня 2019

вы можете использовать ControlTemplate для достижения этого

1.Вы можете определить ControlTemplate на уровне приложения, в App.xmal

<Application.Resources>
    <ResourceDictionary>
        <ControlTemplate x:Key="SubContentPageTemplate">
             <StackLayout>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Image x:Name="BackIcon" HorizontalOptions="Start" 
                           Grid.Row="0" />
                    <Label x:Name="TitleLabel" HorizontalOptions="Center"
                           FontSize="Large" FontAttributes="Bold"
                           TextColor="Black" Grid.Row="0" />
                </Grid>
                <ContentPresenter  />
            </StackLayout>
        </ControlTemplate>
    </ResourceDictionary>
</Application.Resources>

2.используйте в своем FilterPage.xaml

<ContentPage>
    <ContentView ControlTemplate="{StaticResource SubContentPageTemplate}">
     <StackLayout>
        <Label  x:Name="SearchLabel" Text="Search keyword" 
            TextColor="Black" FontSize="Large" Margin="10,10,0,0" />
        <Editor x:Name="SearchEditor" Placeholder="Type a keyword"
            PlaceholderColor="Gray" Margin="10,10,10,0"
            HorizontalOptions="CenterAndExpand"/>
     </StackLayout>
   </ContentView>   
</ContentPage>

дополнительную информацию, которую вы можете перевести на ControlTemplate

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