【发布时间】:2019-05-03 08:34:19
【问题描述】:
我是 WPF 新手,我尝试了以下代码:
<Grid>
<Label x:Name="two" Content="text"/>
<Label x:Name="one" Content="{Binding ElementName=two}"/>
</Grid>
我说错了
指定元素已经是另一个元素的逻辑子元素
通过谷歌搜索,我了解到我有一个控件,该控件已经是某个控件的子控件,并且我正在尝试将其分配给另一个控件作为其子控件。
我没有在我的代码中弄明白。
什么可能导致问题?
提前谢谢你。
【问题讨论】:
-
通过编写
Content="{Binding ElementName=two}",您尝试将名为two的Label添加到名为Label的Content中。这将导致Labeltwo成为Grid和LabelonesContent的孩子。 -
@LittleBit :所以如果我理解逻辑,标签的内容被视为对象而不是属性。所以在我的情况下:标签一的内容将一方面是标签一的孩子,我试图将它分配给另一个标签,这使得内容成为两个标签的孩子?
-
不完全是:
Content是一个Property,其属性值为object。问题是:Binding{Binding ElementName=two}传递了对Labeltwo本身的引用,因此在不同的父母中有两个对Labeltwo的引用。一个父级是Grid,另一个是Labelone,可以说Labeltwo应该存在于Grid和Content的Labelone中(即正如您在错误中看到的那样,这是不可能的)。我希望这能解释得更好一点。 -
@LittleBit :是的,好一点。所以做一个标签的内容是另一个标签的内容是不可能的。折断 !有没有办法用 XAML 做到这一点?
-
如果
Content不是UIElement是可能的。尝试绑定到其内容,而不是元素本身 -> 请参阅 mm8 答案。