如何将 XAML(或另一个 ContentView)作为子项传递给 ContentView

问题描述 投票:0回答:1

我正在尝试创建一个 ContentView,并在其中将子项作为 XAML 或(另一个内容视图)传递。我怎样才能做到这一点?

例如: 我有一种观点是 Header.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:strings="clr-namespace:Eurynote.Localization.Resources.en;assembly=Eurynote.Localization"
             x:Class="Eurynote.Core.Views.Common.EurynoteHeader">
    
    <HorizontalStackLayout Spacing="10" VerticalOptions="Center">
        <Image Source="brand_icon" WidthRequest="32" HeightRequest="30" />
        <Label Text="Header" Margin="0,-3,0,0" />
    </HorizontalStackLayout>
    
</ContentView>

现在,在我的 MainPage.xaml 文件中,我可以将此视图称为

<common:Header />

并且运行良好。

但是我如何将另一个控件传递到与子项相同的内容视图,例如按钮、标签等...或任何其他 ContentView,如下面两个示例所示。

<common:Header>
    <Button Text="Button" /> 
</common:Header>

<common:Header>
    <common:AnotherView />
</common:Header>

我想确保只能传递单个内容,如Frame

谢谢你!!!

c# .net xamarin maui
1个回答
0
投票

首先,如果使用以下代码,ContentView的内容将被Button覆盖。

<common:Header>
    <Button Text="Button" /> 
</common:Header>

因此您无法从 xaml 中为 contentview 添加子项。但你可以在后面的代码中做到这一点。如:

在xaml中:

<common:Header x:Name = "header">

在页面的构造函数中:

public partial class MainPage()
{
    InitializeComponent();
    var layout = head.Content as HorizontalStackLayout;
    layout.Children.Add(new Button(){ Text = "new button"});
}

您可以通过这种方式将新项目作为子项添加到内容视图中。

© www.soinside.com 2019 - 2024. All rights reserved.