下面是我的代码:
<?xml version="1.0" encoding="UTF-8" ?>
<pages:PopupPage
x:Class="Memorise.DecksTab.CopyDeckPopup"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup">
<Label />
<Label />
</pages:PopupPage>支持代码: csharp
[ContentProperty("Contents")]
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CopyDeckPopup : Rg.Plugins.Popup.Pages.PopupPage
{
StackLayout contentStack { get; } = new StackLayout()
{
Spacing = 0,
Padding = new Thickness(0),
Orientation = StackOrientation.Vertical
};
public IList<View> Contents { get => contentStack.Children; }
public CopyDeckPopup(string clickedDeckName, string clickedDeckDescription)
{
BindingContext = new CopyDeckPopupViewModel(clickedDeckName, clickedDeckDescription);
InitializeComponent();
Content = contentStack;
}在第一个XAML中,我在第二个Label上得到了一个错误:
属性“内容”设置不止一次。
发布于 2020-11-25 09:08:27
我可以复制这种行为。
尽管如此,,在我这一边,即使VS显示了警告/错误,如果我正确地运行了它部署的项目,并且显示了两个标签。
VS似乎没有认识到ContentProperty正在超越,而是假设您试图将两个Label添加到Content中,这是错误的,因为您正在将它们添加到自定义ContentProperty Contents中!
请运行这个项目,如果部署失败请告诉我.
更新
整个问题在我看来就像是VS的限制。最后,这只是一个警告,您应该能够在没有任何危险的情况下忽略它。
另一方面,如果您选择在您可以编写的代码上设置标签
public CopyDeckPopup(string clickedDeckName, string clickedDeckDescription)
{
BindingContext = new CopyDeckPopupViewModel(clickedDeckName, clickedDeckDescription);
InitializeComponent();
Content = contentStack;
Contents.Add(new Label() { Text = "ABC" });
Contents.Add(new Label() { Text = "DEF" });
}但是现在这看起来是多余的,因为据我所知,ContentProperty的属性是
XAML处理器用于确定内容属性。 使用ContentPropertyAttribute装饰类型允许更短的XAML语法。
如果您在C#上编写所有代码,只需使用好的旧Stacklayout并编写代码如下
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CopyDeckPopup : Rg.Plugins.Popup.Pages.PopupPage
{
public CopyDeckPopup(string clickedDeckName, string clickedDeckDescription)
{
BindingContext = new CopyDeckPopupViewModel(clickedDeckName, clickedDeckDescription);
InitializeComponent();
StackLayout contentStack = new StackLayout()
{
Spacing = 0,
Padding = new Thickness(0),
Orientation = StackOrientation.Vertical,
Children =
{
new Label() { Text = "ABC" },
new Label() { Text = "ABC" }
}
};
Content = contentStack;
}https://stackoverflow.com/questions/65001030
复制相似问题