#xaml #xamarin #xamarin.forms #nested #contentview
#xaml #xamarin #xamarin.формы #вложенный #просмотр содержимого
Вопрос:
В приложении у меня есть два ContentView
элемента управления, которые я пытаюсь создать на верхнем уровне ContentPage
. Первый, ScaffoldView
, содержит некоторые элементы макета, которые я хочу иметь во всем приложении:
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="App.ScaffoldView">
<ContentView.Content>
<Grid
Margin="10,35,10,10"
VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>...</Grid.RowDefinitions>
<!-- Awesome header stuff -->
<!-- I'd like the below to take given content -->
<ContentView
Grid.Row="..."
Content="{Binding Content}" />
<!-- Even more awesome footer stuff -->
</Grid>
</ContentView.Content>
</ContentView>
Второй, InputsView
, содержит всего несколько пар элементов Label
/ Entry
:
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="App.InputsView">
<ContentView.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Text="Label1"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalTextAlignment="End" />
<Entry Grid.Column="1"
Text="Input1"
VerticalOptions="Center" />
<Label Grid.Row="1"
Text="Label2"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalTextAlignment="End" />
<Entry Grid.Row="1"
Grid.Column="1"
Text="Input2"
VerticalOptions="Center" />
<Label Grid.Row="2"
Text="Label3"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalTextAlignment="End" />
<Entry Grid.Row="2"
Grid.Column="1"
Text="Input3"
VerticalOptions="Center" />
</Grid>
</ContentView.Content>
</ContentView>
Наконец, верхний уровень ContentPage
:
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:App"
x:Class="App.MainPage">
<controls:ScaffoldView>
<controls:InputsView />
</controls:ScaffoldView>
</ContentPage>
В настоящее время все, что показывает, это InputsView
. Я полагаю, это происходит только потому, что все Content
содержимое MainPage
занято ScaffoldView
, а все Content
ScaffoldView
, как определено в Scaffold.xaml
, переопределяется <controls:InputsView />
тегом.
В идеале, я бы хотел, чтобы был какой-то способ включения <controls:InputsView />
внутри открывающих и закрывающих <controls:ScaffoldView>
тегов, как указано выше, и он показывал это заданное содержимое внутри ScaffoldView
собственного содержимого, определенного внутри Scaffold.xaml
.
Возможно ли вложить / смешать Content
таким образом, или мне нужно будет определить пользовательское свойство, например ChildContent
?
Комментарии:
1.
ScaffoldView
В вашем случае это будет свойство содержимого,InputsView
поскольку вы переопределили уже определенное (внутри вашего ScaffoldView.xaml) при использовании (путем вложения). по умолчанию вложение contentView = присвоение ему свойства содержимого.2. требуется ли вам вложение, как вы описали, или вы проявляете гибкость?
3. Я могу быть гибким, хотя для привязки данных было бы лучше, если бы он был вложенным. Я думаю, я мог бы попробовать посмотреть, что
StackLayout
происходит с егоChildren
собственностью.4. @Bondolin Похоже, что ControlTemplate с помощью ContentPresenter может вам помочь.