Свойства коллекции пользовательского контроля wpf с различными типами - PullRequest
0 голосов
/ 22 июня 2011

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

У меня есть элемент управления со свойством коллекции, которое я хочу использовать в различных типах, например, как сетка данных позволяет выбирать DataGridTextColumn, DataGridCheckBoxColumn и т. д. в коллекции столбцовимущество.Я подумал, что это будет легко сделать, создав открытое для просмотра свойство абстрактного типа базового класса, и это позволит включить все мои производные классы в список.но это не работает.если я сделаю базовый класс неабстрактным, он появится, но я не смогу получить более одного типа для отображения в этом списке.как мне заставить это работать?

1 Ответ

0 голосов
/ 24 июня 2011

Если я правильно понимаю ваш вопрос, вам нужна реализация DataTemplateSelector и набор ресурсов DataTemplate в соответствии с типами свойств, которые вы хотите отобразить.

Что-то в этих строках:

public class TemplateSelector:DataTemplateSelector
{
    public override DataTemplate SelectTemplate
                                 (object item,DependencyObject container)
    {
        var element = container as FrameworkElement;

        if(element is ClassA)
            return element.FindResource("classATemplate") as DataTemplate;

        if(element is ClassB) 
            return element.FindResource("classBTemplate") as DataTemplate;

        return null;
    }
}

Где ClassA и ClassB - ваши пользовательские типы.

Для индекса чередования вы можете создать стиль для этих строк

<Style.Triggers>
    <Trigger Property="ItemsControl.AlternationIndex" Value="0">
        <Setter Property="Background" Value="LightBlue"></Setter>
    </Trigger>
    <Trigger Property="ItemsControl.AlternationIndex" Value="1">
        <Setter Property="Background" Value="LightGreen"></Setter>
    </Trigger>
</Style.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...