Пользовательский элемент управления C#, который может содержать другие элементы управления (при его использовании)

Я нашел что-то об этой проблеме для ASP, но это мне не очень помогло ...

Я хотел бы сделать следующее: Я хочу создать пользовательский элемент управления, который имеет коллекцию как свойство и кнопки для навигации по этой коллекции. Я хочу иметь возможность привязать этот пользовательский элемент управления к коллекции и отображать на нем различные элементы управления (содержащие данные из этой коллекции). Например, что у вас было в MS Access на нижнем краю формы ...

более точное:

когда я фактически использую элемент управления в своем приложении (после его создания), я хочу иметь возможность добавлять к нему несколько элементов управления (текстовые поля, метки и т. д.) Между <myControly> и </mycontrol> Если я сделаю это сейчас, элементы управления моего пользовательского элемента управления исчезнут.

4 ответов


вот пример один из способов сделать то, что вы хотите:

во - первых, код-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>

мне трудно понять ваш вопрос, но я думаю, что то, что вы описываете-это ItemsControl используя DataTemplates для отображения содержимого (предположительно)ObservableCollection (T).


UserControl может быть не лучшим способом сделать это. Вы хотите добавить украшения вокруг контента, что в основном и делает Border: у него есть дочерний элемент, и он добавляет свой собственный материал по краям.

посмотрите в класс декоратора, из которого происходит граница. Если вы сделаете свою собственную границу потомком, вы легко сможете делать то, что хотите. Однако я считаю, что это потребует написания кода, а не XAML.

вы все еще можете сделать UserControl для обертывания кнопок внизу, чтобы вы могли использовать визуальный конструктор для части процесса. Но декоратор был бы хорошим способом склеить части вместе и обеспечить определяемый пользователем контент.


здесь ссылке к встроенному управлению (HeaderedContentControl), который делает то же самое, что и принятый ответ, за исключением того, что это существующий элемент управления в WPF с .Net 3.0