假设我有一个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>
当我运行它时,我得到了
它甚至不是TextBox?为什么我会在<local:Editor />
中获取内容集。我试过Clean&amp;重建解决方案,我仍然得到这个奇怪的东西。
答案 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>