代码之家  ›  专栏  ›  技术社区  ›  Rich

如何使Silverlight用户控件成为内容容器?

  •  3
  • Rich  · 技术社区  · 16 年前

    我正在制作一个Silverlight用户控件,该控件的使用者需要能够提供自定义属性和内容。我认为这就像公开我的自定义属性作为依赖属性和从ContentControl派生一样简单,但显然不是。

    以下是我的问题:

    1. 我让属性作为一个简单的依赖属性工作,但是为了将它绑定到控件本身的UI,我必须将控件的DataContext设置为它自己的类(this.dataContext=this)。到处都是脏东西…有更好的方法吗?

    2. 我可以让自定义控件的使用者使用内容子元素进行编译,但我不知道如何在控件本身中显示它。我在想一个内容展示者,其内容绑定到当前绑定上下文中的内容,但这不起作用。

    我很想让它发挥作用,但我也对推荐/最佳实践是什么以及为什么有兴趣。我很难用谷歌搜索这些东西。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Bubblewrap    16 年前

    注意:我没有Silverlight的经验,但在WPF中我会做以下操作

    假设您有一个从UserControl派生的控件MyControl,其属性为MyProperty。我认为最漂亮的是为控件定义一个ControlTemplate:

    <UserControl.Template>
        <ControlTemplate TargetType="{x:Type SomeNamespace:MyControl}">
            <StackPanel>
                <TextBlock Text="{TemplateBinding MyProperty}"/>
                <ContentPresenter/>
            </StackPanel>
        </ControlTemplate>
    </UserControl.Template>
    

    使用模板绑定您可以快速创建(单向!)绑定到控件的属性,但仍可以使用普通的绑定语法绑定到实际的数据上下文。 在ControlTemplate中放置ContentPresenter将自动显示内容属性中的内容。

    推荐文章