Контейнерный элемент управления XAML для определенных c элементов управления - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать пользовательский элемент управления с несколькими дочерними элементами указанного класса c. Например, ToolBarTray в WPF может содержать только дочерний элемент ToolBar.

 <ToolBarTray>
            <ToolBar>..</ToolBar>
            <ToolBar>..</ToolBar>
 </ToolBarTray>

Это ограничение затрат на тип дочерних элементов обеспечивается синтамой XAML. Как я могу добиться одинаковых результатов с двумя пользовательскими элементами управления:

 <MyCustomControlA>
            <MyCustomControlB>..</MyCustomControlB>
            <MyCustomControlB>..</MyCustomControlB>
 </MyCustomControlA>

Я пытался создать пользовательский элемент управления, расширяющий ItemsControl, но нет никакого способа применить какое-либо ограничение в синтаксисе XAML.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы можете использовать ContentPropertyAttribute и реализовать свой пользовательский элемент управления, как показано ниже:

    public class MyCustomControlB : Control
    {

    }

    [ContentProperty("MyCustomControls")]
    public class MyCustomControlA : FrameworkElement
    {
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public System.Collections.ObjectModel.Collection<MyCustomControlB> MyCustomControls { get; }

        .
        .
        .
    }
0 голосов
/ 07 апреля 2020

См. ContentPropertyAttribute .

. Класс ToolBarTray использует:

[ContentProperty("ToolBars")]
public class ToolBarTray : FrameworkElement, IAddChild
...

Тип свойства ToolBars Collection<ToolBar>.

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