我遇到了 .NET Maui 问题。我一整天都在努力:我正在创建我的第一个应用程序,一个简单的家庭维护跟踪应用程序。我有 4 个非常相似的屏幕,因此我决定实现一个页面类,以便这些相似的页面可以继承父页面或基页面的特征。我设置了一个页面,
NewBasePage
,5 个页面将继承该页面。我创建了其中一个页面,即 PartsBuyDetail
页面来进行测试。我无法编译它。
我必须做什么才能让
PartsBuyDetail
页面继承NewBasePage
?
这是我的
NewBasePage
XAML 标记:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="HomeUpKeepPro.Views.NewBasePage">
<StackLayout Padding="10">
<Label FontSize="24" HorizontalOptions="Center" x:Name="TitleLabel" />
<Label FontSize="18" HorizontalOptions="Center" x:Name="TaskTitleLabel" />
<CollectionView x:Name="ItemsCollectionView">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal" Padding="5">
<Label Text="{Binding SourceName}" FontSize="16" />
<Label Text="{Binding SourceURL}" FontSize="16"
TextColor="Blue" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<Label x:Name="DetailLabel" />
<Button Text="Add" Clicked="OnAddClicked" />
<Button Text="Save" Clicked="OnSaveClicked" />
<Button Text="Delete" Clicked="OnDeleteClicked" />
</StackLayout>
</ContentPage>
这是我的
NewBasePage.xaml.cs
代码:
using Microsoft.Maui.Controls;
namespace HomeUpKeepPro.Views
{
public partial class NewBasePage : ContentPage
{
public NewBasePage()
{
InitializeComponent();
}
protected void OnAddClicked(object sender, EventArgs e)
{
// Handle the Add button click event
}
protected void OnSaveClicked(object sender, EventArgs e)
{
// Handle the Save button click event
}
protected void OnDeleteClicked(object sender, EventArgs e)
{
// Handle the Delete button click event
}
}
}
注意:当我添加时:
protected Label TitleLabel { get; private set; }
protected Label TaskTitleLabel { get; private set; }
protected CollectionView ItemsCollectionView { get; private set; }
protected Label DetailLabel { get; private set; }
在
public NewBasePage()
行上方,发生了 36 个错误,本质上是说类型 NewBasePage
已经包含标签和 CollectionView 的定义以及 NewBasePage.TitleLabel
和 NewBasePage.TitleLabel
之间的歧义。
这是我的
PartsBuyDetail.xaml
标记(对于要从 NewBasePage
继承的页面):
<?xml version="1.0" encoding="utf-8" ?>
<views:NewBasePage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:HomeUpKeepPro.Views"
x:Class="HomeUpKeepPro.Views.PartsBuyDetail">
</views:NewBasePage>
这最后是我的
PartsBuyDetail.xaml.cs
代码(用于从 NewBasePage
继承的页面):
using Microsoft.Maui.Controls;
using System.Collections.ObjectModel;
using HomeUpKeepPro.Models;
namespace HomeUpKeepPro.Views
{
public partial class PartsBuyDetail : NewBasePage
{
public PartsBuyDetail()
{
InitializeComponent();
// Populate data in code-behind
TitleLabel.Text = "Parts Buy Detail";
TaskTitleLabel.Text = "Task: Buy Parts";
var parts = new ObservableCollection<PartsBuy>
{
new PartsBuy { SourceName = "Home Depot", SourceURL = "www.homedepot.com" },
new PartsBuy { SourceName = "Lowes", SourceURL = "www.lowes.com" }
};
ItemsCollectionView.ItemsSource = parts;
DetailLabel.Text = "Details about buying parts.";
}
}
}
这些是我遇到的错误:
CS0122“NewBasePage.TitleLabel”由于其保护级别 PartsBuyDetail.Xaml.cs 13 而无法访问
而无法访问
CS0122“NewBasePage.TaskTitleLabel”由于其保护级别 PartsBuyDetail.Xaml.cs 14
而无法访问 CS0122“.ItemsCollectionView”由于其保护级别 PartsBuyDetail.Xaml.cs 20
而无法访问 CS0122“NewBasePage.DetailLabel”由于其保护级别 PartsBuyDetail.Xaml.cs 21
关于命名控件是“私有字段”的评论是正确的。 这是我解决这个问题的方法。
在 NewBasePage.xaml 中,对于每个命名项(TitleLabel、TaskTitleLabel、ItemsCollectionView 和 DetailLabel),添加
x:FieldModifier="protected"