Ранее я написал очень похожий пост об этом, где я спросил, как повторно использовать часть кода 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.
Как мне сделать так, чтобы я мог повторно использовать код первых двух строк сетки на обеих страницах и иметь различное содержимое третьего макета сетки?Я согласен с необходимостью установить обе метки, используя приведенный выше код, если это необходимо.
Я довольно новичок в разработке приложений, поэтому любой дополнительный источник объяснения кода ниже оценен.