基本上我所尝试的是,我想要一个在所有页面上都可见的控件。我尝试通过拥有一个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>
1条答案
按热度按时间zte4gxcn1#
我误解了您的请求吗?我创建了一个新项目。项目中有两个页面。一个是BasePage,另一个是继承自BasePage的ChildPage。
ChildPage在网格的第一行有自己的内容,在网格的第二行有从BasePage继承的按钮。
基本页面.xaml:
儿童页面.xaml:
和儿童网页.cs:
您可以在构造函数中将VerticalStackLayout更改为Grid。在您提供的代码中,要将父页面的内容放入子页面的网格中。这是不可能的。子页面基于基页面。子页面中的根视图是基页面中的网格。不能将根视图放入新视图中,但可以将新视图放入根视图中。
我的项目的结果是: