有没有办法在毛伊岛的dotnet中继承Xaml

ubbxdtey  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(168)

基本上我所尝试的是,我想要一个在所有页面上都可见的控件。我尝试通过拥有一个BasePage来实现这一点,我所有的页面都从BasePage继承。
BasePage.xaml

<Grid RowDefinitions="*,80">
         <!-- Grid.Row 0 would be the content of the Pages -->
         <Button Grid.Row="1" Text="Button"/>
    </Grid>

在此示例中,Button将在从此BasePage继承的所有页上全局可见。只有网格的第0行应填充这些页的内容。
我已经尝试在后面的代码中实现这一点,在那里我将创建一个新的网格和按钮,然后将页面的内容添加到网格中。

View content = this.Content;
        Grid g = new Grid();
        g.RowDefinitions = new RowDefinitionCollection()
        {
            new RowDefinition(GridLength.Star),
            new RowDefinition(new GridLength(80))
        };
        g.Add(content, 0, 0);

        Button b = new Button();
        b.Text = "button";
        g.Add(b, 0, 1);

        this.Content = g;

但这并不管用,因为它会在页面样式方面造成很多问题。例如,在我的例子中,标签的文本 Package 不再起作用了。这可以通过任何方式来实现吗?
Mainpage.xaml:

<views:BasePage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:views="clr-namespace:foo.Views"
             xmlns:viewModels="clr-namespace:foo.ViewModels"
             xmlns:converters="clr-namespace:foo.Converters"
             x:Class="foo.MainPage"
             NavigationPage.HasBackButton="False"
             Title="foo"
             Loaded="ContentPage_Loaded">

    <views:BasePage.Content>
         <Grid>
         <!-- Page content -->
         </Grid>
    </views:BasePage.Content>

</views:BasePage>
zte4gxcn

zte4gxcn1#

我误解了您的请求吗?我创建了一个新项目。项目中有两个页面。一个是BasePage,另一个是继承自BasePage的ChildPage。
ChildPage在网格的第一行有自己的内容,在网格的第二行有从BasePage继承的按钮。
基本页面.xaml:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Testinherit.BasePage">
    <Grid RowDefinitions="*,80">
        <Button Grid.Row="1" Text="Click Me"/>
    </Grid>
</ContentPage>

儿童页面.xaml:

<base:BasePage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
               xmlns:base="clr-namespace:Testinherit"
             x:Class="Testinherit.ChildPage"
             Title="ChildPage">
   
</base:BasePage>

和儿童网页.cs:

public partial class ChildPage : BasePage
{
      public ChildPage()
      {
            InitializeComponent();
            var grid = this.Content as Grid;
            VerticalStackLayout stacklayout = new VerticalStackLayout();
            Label label = new Label() { Text = "this is a new Label in the child page"};
            Button button = new Button() { Text = "this is a new Button in the child page" };
            stacklayout.Children.Add(label);
            stacklayout.Children.Add(button);
            grid.Insert(0, stacklayout);
      }
}

您可以在构造函数中将VerticalStackLayout更改为Grid。在您提供的代码中,要将父页面的内容放入子页面的网格中。这是不可能的。子页面基于基页面。子页面中的根视图是基页面中的网格。不能将根视图放入新视图中,但可以将新视图放入根视图中。
我的项目的结果是:

相关问题