首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在重写ContentProperty of ContentPage时修复XAML中的“属性内容设置多次”错误

如何在重写ContentProperty of ContentPage时修复XAML中的“属性内容设置多次”错误
EN

Stack Overflow用户
提问于 2020-11-25 08:33:13
回答 1查看 388关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
<?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

代码语言:javascript
复制
[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上得到了一个错误:

属性“内容”设置不止一次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 09:08:27

我可以复制这种行为。

尽管如此,,在我这一边,即使VS显示了警告/错误,如果我正确地运行了它部署的项目,并且显示了两个标签。

VS似乎没有认识到ContentProperty正在超越,而是假设您试图将两个Label添加到Content中,这是错误的,因为您正在将它们添加到自定义ContentProperty Contents中!

请运行这个项目,如果部署失败请告诉我.

更新

整个问题在我看来就像是VS的限制。最后,这只是一个警告,您应该能够在没有任何危险的情况下忽略它。

另一方面,如果您选择在您可以编写的代码上设置标签

代码语言:javascript
复制
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并编写代码如下

代码语言:javascript
复制
[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;
     
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65001030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档