【问题标题】:Specified element is already the logical child of another element for 2 Labels指定元素已经是 2 个标签的另一个元素的逻辑子元素
【发布时间】: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}",您尝试将名为twoLabel 添加到名为LabelContent 中。这将导致 Label two 成为 GridLabel ones Content 的孩子。
  • @LittleBit :所以如果我理解逻辑,标签的内容被视为对象而不是属性。所以在我的情况下:标签一的内容将一方面是标签一的孩子,我试图将它分配给另一个标签,这使得内容成为两个标签的孩子?
  • 不完全是:Content 是一个 Property,其属性值为 object。问题是:Binding{Binding ElementName=two} 传递了对 Label two 本身的引用,因此在不同的父母中有两个对 Label two 的引用。一个父级是Grid,另一个是Label one,可以说Label two 应该存在于GridContentLabel one 中(即正如您在错误中看到的那样,这是不可能的)。我希望这能解释得更好一点。
  • @LittleBit :是的,好一点。所以做一个标签的内容是另一个标签的内容是不可能的。折断 !有没有办法用 XAML 做到这一点?
  • 如果Content 不是UIElement 是可能的。尝试绑定到其内容,而不是元素本身 -> 请参阅 mm8 答案。

标签: wpf xaml


【解决方案1】:

您可以绑定到twoContent 属性:

<Label x:Name="one" Content="{Binding Content, ElementName=two}"/>

但是一个视觉元素在视觉树中只能出现一次,所以你不能将Content属性绑定到Label本身。

顺便说一句,如果你想显示文字,你应该更喜欢TextBlocks而不是Labels

<TextBlock x:Name="two" Text="text"/>
<TextBlock x:Name="one" Text="{Binding Text, ElementName=two}"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2011-04-30
    • 2012-02-20
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多