TextBox в UserControl не отображается правильно - PullRequest
0 голосов
/ 19 ноября 2010

Предположим, у меня есть UserControl Editor, у него есть TextBox.Он также имеет свойство Content.Здесь я просто устанавливаю текстовое содержимое на статическое значение «Эй»

<UserControl x:Class="WpfApplication1.Editor" ...>
    <TextBox Text="Hey" />
    <!--<TextBox Text="{Binding Content}" />-->
</UserControl>

Тогда у меня есть окно, чтобы отобразить все это.

<Window x:Class="WpfApplication1.Window1" ...>
    <StackPanel>
        <local:Editor Content="Heya" />
    </StackPanel>
</Window>

Когда я запускаю его, я получаю

alt text

Это даже не TextBox?И почему я получаю контент, установленный в <local:Editor />.Я попробовал решение Clean & Rebuild и все еще получаю эту странную вещь.

1 Ответ

2 голосов
/ 19 ноября 2010

Выпуск


Достаточно просто. На самом деле UserControl - это просто ContentControl, поэтому у него есть свойство зависимости с именем Content. Когда вы устанавливаете это свойство, вы устанавливаете все содержимое вашего ContentControl. Свойство Content является значением по умолчанию (посмотрите на свойства по умолчанию для WPF на MSDN).

<UserControl x:Class="WpfApplication1.Editor" ...>

    <!-- Here, you set the Content property (because it is
    the default one) of the UserControl as a TextBox with 
    the text "Hey". -->

    <TextBox Text="Hey" />
</UserControl>

Сравните выше и ниже коды:

<!-- Here, the Content property is explicitly set. -->
<local:Editor Content="Heya" />

В обоих случаях вы определяете свойство Content с другим содержимым ...

<ч />

Решение


Чтобы решить вашу проблему, определите пользовательский DependencyProperty в Editor с именем TextContent, например, и сделайте следующее:

<UserControl x:Class="WpfApplication1.Editor" ...>
    <TextBox Text="{Binding TextContent, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
</UserControl>

И

<local:Editor TextContent="Heya" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...