Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使Silverlight用户控件成为内容容器?_.net_Wpf_Silverlight_User Controls - Fatal编程技术网

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

.net 如何使Silverlight用户控件成为内容容器?,.net,wpf,silverlight,user-controls,.net,Wpf,Silverlight,User Controls,我正在制作一个Silverlight用户控件,其中控件的使用者需要能够提供自定义属性和内容。我认为这和将自定义属性公开为依赖属性并从ContentControl派生一样简单,但显然不是这样 以下是我的问题: 我将该属性作为一个简单的依赖属性使用,但要将其绑定到控件本身的UI,我必须将控件的DataContext设置为它自己的类(this.DataContext=this)。这感觉浑身脏兮兮的…有没有更好的方法 我可以让自定义控件的使用者使用内容子元素进行编译,但我不知道如何在控件本身中显示它。我

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

以下是我的问题:

  • 我将该属性作为一个简单的依赖属性使用,但要将其绑定到控件本身的UI,我必须将控件的DataContext设置为它自己的类(this.DataContext=this)。这感觉浑身脏兮兮的…有没有更好的方法

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


  • 我很想让它发挥作用,但我也对推荐/最佳实践是什么以及为什么这么做感兴趣。我在谷歌上搜索这些东西时遇到了困难。

    注意:我在silverlight方面没有经验,但在WPF方面我会做以下工作

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

    <UserControl.Template>
        <ControlTemplate TargetType="{x:Type SomeNamespace:MyControl}">
            <StackPanel>
                <TextBlock Text="{TemplateBinding MyProperty}"/>
                <ContentPresenter/>
            </StackPanel>
        </ControlTemplate>
    </UserControl.Template>
    
    
    
    使用{TemplateBinding}可以快速创建(单向!)控件属性的绑定,同时仍然可以使用正常的{Binding}语法绑定到实际的DataContext。 在ControlTemplate中放置ContentPresenter将自动显示内容属性中的任何内容