wpf usercontrol具有不同类型的集合属性

时间:2011-06-22 19:25:06

标签: wpf visual-studio collections user-controls properties

我有一个具有一些集合属性的用户控件。它们在设计时显示在属性表中,并在单击椭圆时为我提供集合属性编辑器。到目前为止,所有这一切都在发挥作用。

我有一个带有集合属性的控件,我希望能够使用不同的类型,就像datagrid允许您在其列集合属性中选择DataGridTextColumn,DataGridCheckBoxColumn等一样。我认为通过创建抽象基类类型的公共可浏览属性来完成这将是一件简单的事情,它将允许列表中的所有派生类。但它不起作用。如果我使基类非抽象,它会显示,但我不能在该列表中显示多个类型。我该如何使其发挥作用?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要的是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>