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

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

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

чтобы быть более точным:

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

Ответы [ 4 ]

8 голосов
/ 09 июня 2009

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

Сначала код - 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 голос
/ 09 июня 2009

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

0 голосов
/ 11 июня 2012

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

0 голосов
/ 09 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...