XAML ContentProperty 只读属性

Kation 2013-04-29 01:39:33
[ContentProperty("Children")]
public class XX
{
public XX()
{
Children = new List<XXX>();
}

public List<XXX> Children{ get; private set; }
}


在XAML视图里,不能对XX的内容进行编辑,说具有不正确的访问级别。
怎么做到像WPF里的Panel一样,Children是只有get的,但是XAML里又能设置子项。
类似的还有Items等等。
...全文
219 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kation 2013-04-29
  • 打赏
  • 举报
回复
引用 8 楼 tiana0 的回复:
[quote=引用 7 楼 ZIP_xG 的回复:] [quote=引用 6 楼 tiana0 的回复:] [quote=引用 5 楼 ZIP_xG 的回复:] [quote=引用 4 楼 tiana0 的回复:] 代码中:
public List<XXX> Children{ get; private set; }
set方法被设定为private,那样的话,对XX的内容进行编辑,肯定会提示“具有不正确的访问级别。”。 要不改成这样的:
public List<XXX> Children{ get; }
至于能不能实现成panel这种效果,还真没研究过。 楼主可以看看panel的介绍,看看能不能找到点提示。 http://msdn.microsoft.com/zh-cn/library/ms611637.aspx
微软的网站都不说的,我上谷歌查了好久也找不到相关资料…… WPF的Panel的Children属性只有get却能在XAML里设置子项,而且也加有ContentProperty。 不知如何是好啊,我的这里的Children是个自定义的Collection,里面的方法都被重写了,并且与属性的拥有者息息相关的,所以不能给其它代码set……[/quote] 会不会是在构造函数中来set值的。[/quote] WPF的Panel本来就是在构造函数中set的Children。 但是自定义类型的属性,被XAML要求拥有set权限,没有set权限就出错。[/quote] 那你set权限加上,只是设置成private。但是值还是在构造函数中设置,这样不行吗。[/quote] 不行,有没有set方法都不行。
三五月儿 2013-04-29
  • 打赏
  • 举报
回复
引用 7 楼 ZIP_xG 的回复:
[quote=引用 6 楼 tiana0 的回复:] [quote=引用 5 楼 ZIP_xG 的回复:] [quote=引用 4 楼 tiana0 的回复:] 代码中:
public List<XXX> Children{ get; private set; }
set方法被设定为private,那样的话,对XX的内容进行编辑,肯定会提示“具有不正确的访问级别。”。 要不改成这样的:
public List<XXX> Children{ get; }
至于能不能实现成panel这种效果,还真没研究过。 楼主可以看看panel的介绍,看看能不能找到点提示。 http://msdn.microsoft.com/zh-cn/library/ms611637.aspx
微软的网站都不说的,我上谷歌查了好久也找不到相关资料…… WPF的Panel的Children属性只有get却能在XAML里设置子项,而且也加有ContentProperty。 不知如何是好啊,我的这里的Children是个自定义的Collection,里面的方法都被重写了,并且与属性的拥有者息息相关的,所以不能给其它代码set……[/quote] 会不会是在构造函数中来set值的。[/quote] WPF的Panel本来就是在构造函数中set的Children。 但是自定义类型的属性,被XAML要求拥有set权限,没有set权限就出错。[/quote] 那你set权限加上,只是设置成private。但是值还是在构造函数中设置,这样不行吗。
Kation 2013-04-29
  • 打赏
  • 举报
回复
引用 6 楼 tiana0 的回复:
[quote=引用 5 楼 ZIP_xG 的回复:] [quote=引用 4 楼 tiana0 的回复:] 代码中:
public List<XXX> Children{ get; private set; }
set方法被设定为private,那样的话,对XX的内容进行编辑,肯定会提示“具有不正确的访问级别。”。 要不改成这样的:
public List<XXX> Children{ get; }
至于能不能实现成panel这种效果,还真没研究过。 楼主可以看看panel的介绍,看看能不能找到点提示。 http://msdn.microsoft.com/zh-cn/library/ms611637.aspx
微软的网站都不说的,我上谷歌查了好久也找不到相关资料…… WPF的Panel的Children属性只有get却能在XAML里设置子项,而且也加有ContentProperty。 不知如何是好啊,我的这里的Children是个自定义的Collection,里面的方法都被重写了,并且与属性的拥有者息息相关的,所以不能给其它代码set……[/quote] 会不会是在构造函数中来set值的。[/quote] WPF的Panel本来就是在构造函数中set的Children。 但是自定义类型的属性,被XAML要求拥有set权限,没有set权限就出错。
三五月儿 2013-04-29
  • 打赏
  • 举报
回复
引用 5 楼 ZIP_xG 的回复:
[quote=引用 4 楼 tiana0 的回复:] 代码中:
public List<XXX> Children{ get; private set; }
set方法被设定为private,那样的话,对XX的内容进行编辑,肯定会提示“具有不正确的访问级别。”。 要不改成这样的:
public List<XXX> Children{ get; }
至于能不能实现成panel这种效果,还真没研究过。 楼主可以看看panel的介绍,看看能不能找到点提示。 http://msdn.microsoft.com/zh-cn/library/ms611637.aspx
微软的网站都不说的,我上谷歌查了好久也找不到相关资料…… WPF的Panel的Children属性只有get却能在XAML里设置子项,而且也加有ContentProperty。 不知如何是好啊,我的这里的Children是个自定义的Collection,里面的方法都被重写了,并且与属性的拥有者息息相关的,所以不能给其它代码set……[/quote] 会不会是在构造函数中来set值的。
Kation 2013-04-29
  • 打赏
  • 举报
回复
引用 4 楼 tiana0 的回复:
代码中:
public List<XXX> Children{ get; private set; }
set方法被设定为private,那样的话,对XX的内容进行编辑,肯定会提示“具有不正确的访问级别。”。 要不改成这样的:
public List<XXX> Children{ get; }
至于能不能实现成panel这种效果,还真没研究过。 楼主可以看看panel的介绍,看看能不能找到点提示。 http://msdn.microsoft.com/zh-cn/library/ms611637.aspx
微软的网站都不说的,我上谷歌查了好久也找不到相关资料…… WPF的Panel的Children属性只有get却能在XAML里设置子项,而且也加有ContentProperty。 不知如何是好啊,我的这里的Children是个自定义的Collection,里面的方法都被重写了,并且与属性的拥有者息息相关的,所以不能给其它代码set……
三五月儿 2013-04-29
  • 打赏
  • 举报
回复
代码中:
public List<XXX> Children{ get; private set; }
set方法被设定为private,那样的话,对XX的内容进行编辑,肯定会提示“具有不正确的访问级别。”。 要不改成这样的:
public List<XXX> Children{ get; }
至于能不能实现成panel这种效果,还真没研究过。 楼主可以看看panel的介绍,看看能不能找到点提示。 http://msdn.microsoft.com/zh-cn/library/ms611637.aspx
Kation 2013-04-29
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
public List<XXX> Children{ get; /*private*/ set; }
就是要不能set啊,只能由class来set。 不然就达不到效果了。
引用 2 楼 nanqi0506 的回复:
看源码就知道了,给Children一个Attribute [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
这个没用。 无法设置元素“Panel”上的内容属性“Children”。“Children”具有不正确的访问级别,或者其程序集不允许访问。 行 8 位置 10.
神棍 2013-04-29
  • 打赏
  • 举报
回复
看源码就知道了,给Children一个Attribute [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
gxingmin 2013-04-29
  • 打赏
  • 举报
回复
public List<XXX> Children{ get; /*private*/ set; }
Kation 2013-04-29
  • 打赏
  • 举报
回复
引用 10 楼 nanqi0506 的回复:
我说的那个标上,然后去掉set。
发现问题了 我的Collection是实现接口IList<XXX>,不能通过! 但是,如果我的Collection继承Collection<XXX>就可以通过! 很奇怪的问题啊,为什么呢
Kation 2013-04-29
  • 打赏
  • 举报
回复
引用 10 楼 nanqi0506 的回复:
我说的那个标上,然后去掉set。
不行……
神棍 2013-04-29
  • 打赏
  • 举报
回复
我说的那个标上,然后去掉set。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧