【问题标题】:wpf usercontrol collection properties with different typeswpf usercontrol 不同类型的集合属性
【发布时间】:2011-09-20 16:21:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢代码!我认为这是朝着正确的方向发展。但是如何使用它在 Visual Studio 集合属性编辑器的选择项框中创建替代条目?
    • 如果我正确理解您的问题,您想要交替风格吗?为此,您可以使用 ItemsControl.AlternationIndex.. 我已经编辑了帖子以显示这是如何完成的。
    • 这解决了你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多