Я новичок в WPF, и я попробовал код ниже:
<Grid>
<Label x:Name = "two" Content = "text"/>
<Label x:Name = "one" Content = "{Binding ElementName=two}"/>
</Grid>
Я получил сообщение об ошибке
Specified element is already the logical child of another element
Из поиска в Google я понял, что у меня есть элемент управления, который уже является дочерним для некоторого элемента управления, и я пытаюсь назначить его другому в качестве его дочернего элемента.
Что я не понял в своем коде.
Что может вызвать проблему?
Заранее спасибо.
@LittleBit: Итак, если я понял логику, содержимое метки рассматривается как объект, а не как свойство. Итак, в моем случае: содержимое метки one будет в одной руке дочерним для метки one, и я пытаюсь назначить ее другой метке, которая делает содержимое дочерним для обеих меток?
Не совсем так: Content — это Property со значением свойства object. Проблема в том, что Binding{Binding ElementName=two} передает ссылку на сам Labeltwo, и поэтому в разных родителях есть две ссылки на Labeltwo. Один Родитель - это Grid, а другой Labelone, можно сказать, что Labeltwo должен существовать внутри Grid и Content из Labelone (что невозможно, как вы можете видеть в ошибке). Я надеюсь, что это объясняет немного лучше.
@LittleBit: да, немного лучше. Таким образом, невозможно сделать метку, содержимое которой совпадает с содержимым другой метки. Щелчок ! нет способа сделать это с XAML?
Это возможно, если Content не является UIElement. Попробуйте выполнить привязку к его содержимому, а не к самому элементу -> см. ответ mm8.
@LittleBit: я думал, что нет необходимости указывать путь как содержимое для метки One. теперь я понял . Спасибо





Вы можете привязаться к свойству Content объекта two:
<Label x:Name = "one" Content = "{Binding Content, ElementName=two}"/>
Но визуальный элемент может отображаться только как однажды в визуальном дереве, поэтому вы не можете привязать свойство Content к самому Label.
Кстати, если вы хотите отобразить текст, вы должны предпочесть TextBlocksLabels:
<TextBlock x:Name = "two" Text = "text"/>
<TextBlock x:Name = "one" Text = "{Binding Text, ElementName=two}"/>
Написав
Content = "{Binding ElementName=two}", вы пытаетесь добавитьLabelс именемtwoкContentизLabelс именемone. Это приведет к тому, чтоLabeltwoбудет потомкомGridИLabelonesContent.