可以包含其他控件的C#用户控件(使用时)

时间:2009-06-09 12:37:00

标签: c# wpf user-controls

我发现ASP的这个问题,但它对我帮助不大......

我想要做的是:我想创建一个用户控件,该控件具有集合作为属性和按钮来浏览此集合。我希望能够将此用户控件绑定到一个集合并在其上显示不同的控件(包含该集合中的数据)。 就像你在表格下边缘的MS Access中所拥有的那样......

更确切地说:

当我在我的应用程序中实际使用该控件时(在我创建它之后),我希望能够在<myControly></mycontrol>之间添加多个控件(文本框,标签等) 如果我现在这样做,我的用户控件上的控件就会消失。

4 个答案:

答案 0 :(得分:8)

以下是一种实现所需目标的方法示例:

首先,代码 - UserControl1.xaml.cs

public partial class UserControl1 : UserControl
{
    public static readonly DependencyProperty MyContentProperty =
        DependencyProperty.Register("MyContent", typeof(object), typeof(UserControl1));


    public UserControl1()
    {
        InitializeComponent();
    }

    public object MyContent
    {
        get { return GetValue(MyContentProperty); }
        set { SetValue(MyContentProperty, value); }
    }
}

用户控件的XAML - UserControl1.xaml

<UserControl x:Class="InCtrl.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300" Name="MyCtrl">
    <StackPanel>
        <Button Content="Up"/>
        <ContentPresenter Content="{Binding ElementName=MyCtrl, Path=MyContent}"/>
        <Button Content="Down"/>
    </StackPanel>
</UserControl>

最后,xaml使用我们精彩的新控件:

<Window x:Class="InCtrl.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:me="clr-namespace:InCtrl"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <me:UserControl1>
            <me:UserControl1.MyContent>
                <Button Content="Middle"/>
            </me:UserControl1.MyContent>
        </me:UserControl1>
    </Grid>
</Window>

答案 1 :(得分:1)

我很难理解你的问题,但我认为你所描述的是ItemsControl使用DataTemplates来显示(推测)ObservableCollection(T)的内容。

答案 2 :(得分:0)

UserControl可能不是最好的方法。你想要在内容周围添加装饰,这基本上就是Border所做的:它有一个子元素,它在边缘附加了自己的东西。

查看Decorator类,Border从哪个类开始。如果你自己制作边境后裔,你应该可以轻松地做你想做的事。但是,我认为这需要编写代码,而不是XAML。

您可能仍希望创建一个UserControl来将按钮包装在底部,这样您就可以使用可视化设计器来完成部分过程。但是装饰师将这些碎片粘合在一起并允许用户可定义的内容是一种很好的方式。

答案 3 :(得分:0)

这是内置控件(HeaderedContentControl)的link,它与接受的答案做同样的事情,但它是.Net 3.0以来它是WPF中的现有控件