Повторное использование большого количества элементов интерфейса Xaml - PullRequest
0 голосов
/ 25 марта 2019

Ранее я написал очень похожий пост об этом, где я спросил, как повторно использовать часть кода Xaml.Хотя это сработало для небольшого элемента, который у меня был, он не совсем работает в текущем масштабе.

Используя Xamarin, у меня есть макет с вкладками с двумя страницами.Страница состоит из сетки с тремя слоями, два из которых одинаковы на обеих страницах.Третий слой должен быть разным на обеих страницах.Обе страницы в настоящее время находятся в одном файле.Это означает, что большая часть кода является просто копией-вставкой, и это затрудняет редактирование значений определенных меток в этих первых двух строках, поскольку они не могут иметь одинаковые идентификаторы / имена.

В настоящее время я устанавливаю строковую переменную в коде с помощью сеттера.

string _vesselCode;
public string VesselCode
{
    get
    {
        return _vesselCode;
    }
    set
    {
        _vesselCode = value;
        currentVessel.Text = _vesselCode;
        currentVesselClone.Text = currentVessel.Text;
    }
}

Хотя это работает, у меня все еще много дублированного кода (как показано ниже).

Это содержимое каждой страницы.Единственный контент для конкретной страницы находится внизу.Остальное буквально копируется на вторую страницу.Код ниже без каких-либо идентификаторов.

<Grid RowSpacing="0">
        <Grid.RowDefinitions>
            <!-- first row from top {0} - app name, vessel. -->
            <RowDefinition Height="Auto"/>

            <!-- second row {1} - originele freq // nieuwe frequentie. -->
            <RowDefinition Height="Auto"/>

            <!-- third row {2} - tablayout. -->
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!-- header contents -->
        <Grid Grid.Row="0" StyleClass="headerBar">

            <StackLayout Grid.Column="0" HorizontalOptions="Start" StyleClass="inGrid">


                <Label StyleClass="header"
                Text="OV Frequentie"/>
                <Label StyleClass="headerSub"
                Text="huidig voertuig:"/>

            </StackLayout>

        </Grid>

        <!-- freq bar contents -->
        <Grid Grid.Row="1" StyleClass="subHeaderBar">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <BoxView Grid.ColumnSpan="2"
                 BackgroundColor="#2d313a"
                 WidthRequest="2"
                 HeightRequest="2"
                 Margin="5,0,5,-3"/>

            <StackLayout Grid.Column="0" HorizontalOptions="Start" StyleClass="inGrid">
                <Label StyleClass="generalSmallText"
                Text="originele freq: 10"/>
            </StackLayout>

            <StackLayout Grid.Column="1" HorizontalOptions="End" StyleClass="inGrid">
                <Label StyleClass="generalSmallText"
                Text="nieuwe freq: 10"/>
            </StackLayout>
        </Grid>
        <!-- info page content -->
        <Grid Grid.Row="2">
            <StackLayout StyleClass="infoDisplayPage">

                <!-- page unique stuff -->

            </StackLayout>
        </Grid>
    </Grid>

Как я уже сказал, этот вид работает, но невероятно плохой код.Есть несколько ярлыков, которые я хочу изменить, но не могу присвоить им один и тот же идентификатор.Это означает, что я должен либо всегда устанавливать эти значения дважды, либо получать какой-либо атрибут set на одной из меток, автоматически устанавливая другую / иметь атрибуты в коде с таким установщиком.

Мне сказали, что дляиспользуя большую область кода, я мог бы использовать ContentView.Однако я не могу использовать их на двух страницах ContentPages.

Как мне сделать так, чтобы я мог повторно использовать код первых двух строк сетки на обеих страницах и иметь различное содержимое третьего макета сетки?Я согласен с необходимостью установить обе метки, используя приведенный выше код, если это необходимо.

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

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