我正在制作Silverlight UserControl,其中控件的使用者需要能够提供自定义属性和内容。我认为这就像将自定义属性公开为依赖属性并从ContentControl派生一样简单,但显然不是。
以下是我对此的疑问:
我将该属性作为一个简单的依赖属性工作,但是为了将它绑定到控件本身的UI,我不得不将控件的DataContext设置为它自己的类(this.DataContext = this) 。这种感觉到处都很脏......有没有更好的方法呢?
我可以让我的自定义控件的使用者使用Content子元素进行编译,但我不知道如何在控件本身中显示它。我在想一个ContentPresenter,其内容绑定到当前绑定上下文中的内容,但这不起作用。
我想让它发挥作用,但我也对推荐/最佳实践是什么以及为什么感兴趣。我在搜索这些东西时遇到了困难。
答案 0 :(得分:4)
注意:我没有Silverlight经验,但在WPF中我会做以下
假设您有一个控件MyControl,它派生自UserControl,具有属性MyProperty。我认为最漂亮的是为你的控件定义一个ControlTemplate:
<UserControl.Template>
<ControlTemplate TargetType="{x:Type SomeNamespace:MyControl}">
<StackPanel>
<TextBlock Text="{TemplateBinding MyProperty}"/>
<ContentPresenter/>
</StackPanel>
</ControlTemplate>
</UserControl.Template>
使用{TemplateBinding},您可以快速创建(OneWay!)绑定到控件的属性,同时您仍然可以使用普通的{Binding}语法绑定到您的实际DataContext。 在ControlTemplate中放置ContentPresenter将自动显示您的内容属性中的任何内容。