Для того, чтобы он заработал, вам нужно внести пару изменений в ваш код.
В вашем parentView (CommonPopUpView.xaml
) добавить контейнер, который будет содержать ваше тело, это может быть что-то вроде этого:
<ContentView x:Name="BodyContentView"
Grid.Row="1" />
</ContentView>
С существующим кодом он должен выглядеть следующим образом:
<Frame CornerRadius="8"
Padding="0,5,0,5"
BackgroundColor="Blue">
<Grid x:Name="SheetGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Text="Test Title"
Grid.Row="0"
HeightRequest="5"
WidthRequest="50"
BackgroundColor="Red"
HorizontalOptions="Center"
VerticalOptions="Center" />
<ContentView x:Name="BodyContentView"
Grid.Row="1">
</ContentView>
</Grid>
</Frame>
В коде этого файла (CommonPopUpView.xaml.cs
) вам понадобится BindableProperty
:
public static readonly BindableProperty BodyContentProperty = BindableProperty.Create(
nameof(BodyContent),
typeof(View),
typeof(CommonPopUpView),
null,
BindingMode.OneWay,
null,
OnBodyContentChanged);
public View BodyContent
{
get => (View)GetValue(BodyContentProperty);
set => SetValue(BodyContentProperty, value);
}
private static void OnBodyContentChanged(BindableObject bindable, object oldValue, object newValue)
{
if (bindable is CommonPopUpView myCommonPopUpView)
{
myCommonPopUpView.BodyContentView.Content = (View) newValue;
}
}
Если вы хотите получить больше информации о BindableProperties, вы можете прочитать здесь
В этом же файле вам также необходимо добавить аннотацию ContentProperty
в уровень класса. Это должно выглядеть следующим образом:
[ContentProperty("BodyContent")]
public partial class CommonPopUpView : ContentView
Эта последняя часть важна для предотвращения переопределения вашего CommonPopUpView
контента, чтобы убедиться, что любой новый контент будет установлен в подготовленный вами контейнер (BodyContentView
).
Теперь вам просто нужно его использовать:
<controls:CommonPopUpView Margin="6,25">
<Grid Padding="15">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Text="Stack Overflow"
FontSize="18"
TextColor="White"
FontAttributes="Bold" />
<Label Text="stack.overflow@internet.com"
FontSize="12"
TextColor="WhiteSmoke"
Grid.Row="1" />
</Grid>
</controls:CommonPopUpView>
<controls:CommonPopUpView Margin="6,15">
<Grid Padding="15">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="xamarin_small"
WidthRequest="100"
HeightRequest="100"
HorizontalOptions="Center" />
<Image Source="microsoft.jpg"
WidthRequest="100"
HeightRequest="100"
Grid.Column="1"
HorizontalOptions="Center" />
</Grid>
</controls:CommonPopUpView>
Любой контент, который вы устанавливаете в своем CommonPopUpView
CustomView, будет установлен только в контейнере тела, сохраняя другие элементы управления / представления, которые у вас есть. определены.
Надеюсь, это поможет .-