UserControl中的TextBox无法正确呈现

时间:2010-11-19 06:47:53

标签: wpf binding user-controls textbox

假设我有一个UserControl Editor,它有一个TextBox。它还有一个属性Content。这里我只是将文本内容设置为静态值“Hey”

<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&amp;重建解决方案,我仍然得到这个奇怪的东西。

1 个答案:

答案 0 :(得分:2)

问题


足够简单。 UserControl实际上只是ContentControl,因此它有一个名为Content的依赖项属性。设置此属性后,您可以设置ContentControl的全部内容。 Content属性是默认属性(查看MSDN上WPF的默认属性)。

<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的{​​{1}}中定义自定义Editor,然后执行以下操作:

TextContent

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