Предоставление подчиненного элемента управления в UserControl для использования в XAML - PullRequest
1 голос
/ 29 января 2009

У меня есть UserControl, который содержит TreeView. Я хочу, чтобы пользователь мог устанавливать свойства внутреннего элемента управления TreeView через XAML, и я не уверен, как это сделать.

Я пытался создать открытое свойство в UserControl для TreeView, но это только позволяет мне установить триггер SelectedItemChanged.

Я бы хотел сделать что-то вроде:

<ExampleUserControl>
    <ExampleUserControl.TreeView.ItemTemplate>
        ...
    </ExampleUserControl.TreeView.ItemTemplate>
</ExampleUserControl>

Или:

<ExampleUserControl TreeView.ItemsSource="{Binding Foo}" />

Я бы предпочел не создавать свойства в UserControl для каждого свойства TreeView, и я не хочу заставлять пользователя определять элемент управления в C #.

1 Ответ

0 голосов
/ 30 января 2009

Что касается передачи нескольких свойств дочернему элементу управления в вашем пользовательском элементе управления, вы всегда можете предоставить свойство Style.

т.е. ChildStyle

Для ItemSource, если вы не используете трюк [Джош Смит: Элемент шпион / шпион контекста данных / Freezable] [1], у вас будет отключение от DataContexts.

Так что вы либо используете эти трюки, либо просто имеете 2 свойства.

1) ItemsSource 2) ChildStyle

xaml заканчивается ...

    <ChildTreeAnswer:MyControl ItemsSource="{Binding Items}">
        <ChildTreeAnswer:MyControl.ChildStyle>
            <Style>
                <Setter Property="ItemsControl.ItemTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Border BorderBrush="Black"
                                    BorderThickness="1"
                                    Margin="5">
                                <TextBlock Text="{Binding }" />
                            </Border>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ChildTreeAnswer:MyControl.ChildStyle>                           
    </ChildTreeAnswer:MyControl>

Затем в вашем пользовательском элементе управления сделайте ... (для простоты я использовал список)

    <ListBox ItemsSource="{Binding ItemsSource}"
             Style="{Binding ChildStyle}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...