none
如何在 XAML 中硬编码添加自定义的集合类型的依赖属性的集合项? RRS feed

  • 问题

  • 我自定义了一个控件,里面有一个依赖属性,是集合类型,但如何在 XAML 中硬编码添加集合项?
    2015年12月10日 12:46

答案

  • 泛型类型不可以,XAML中无法表达泛型。 数组需要用ArrayList

    我的例子:

      public class CustomControl1 : Control
      {
        static CustomControl1()
        {
          DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
        }
        public static readonly DependencyProperty PropertyTypeProperty = DependencyProperty.Register(
          "PropertyType", typeof(ArrayList), typeof(CustomControl1), new PropertyMetadata(default(ArrayList)));
    
        public ArrayList PropertyType
        {
          get { return (ArrayList)GetValue(PropertyTypeProperty); }
          set { SetValue(PropertyTypeProperty, value); }
        }
      }

    使用的XAML:

        <local:CustomControl1 x:Name="Control1"
            xmlns:local="clr-namespace:WpfApplication1"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib">
          <local:CustomControl1.PropertyType>
            <collections:ArrayList>
              <sys:Int32>12</sys:Int32>
              <sys:Int32>12</sys:Int32>
            </collections:ArrayList>
          </local:CustomControl1.PropertyType>
        </local:CustomControl1>


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2015年12月11日 5:36

全部回复

  • XAML中先声明这个集合元素类型的名字空间,然后在集合类型下,创建元素节点。比如你的集合类型的依赖属性是A, 为ICollection<B>

    则XAML可以为:

    <xxx>
      <xxx.A>
        <ns:B />
        <ns:B />
      </xxx.A>
    </xxx>



    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2015年12月11日 0:52
  • 集合类型必须要 ICollection<B> 吗?可以为 List<T> 或 int[] 等吗?
    2015年12月11日 4:14
  • 泛型类型不可以,XAML中无法表达泛型。 数组需要用ArrayList

    我的例子:

      public class CustomControl1 : Control
      {
        static CustomControl1()
        {
          DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
        }
        public static readonly DependencyProperty PropertyTypeProperty = DependencyProperty.Register(
          "PropertyType", typeof(ArrayList), typeof(CustomControl1), new PropertyMetadata(default(ArrayList)));
    
        public ArrayList PropertyType
        {
          get { return (ArrayList)GetValue(PropertyTypeProperty); }
          set { SetValue(PropertyTypeProperty, value); }
        }
      }

    使用的XAML:

        <local:CustomControl1 x:Name="Control1"
            xmlns:local="clr-namespace:WpfApplication1"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib">
          <local:CustomControl1.PropertyType>
            <collections:ArrayList>
              <sys:Int32>12</sys:Int32>
              <sys:Int32>12</sys:Int32>
            </collections:ArrayList>
          </local:CustomControl1.PropertyType>
        </local:CustomControl1>


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2015年12月11日 5:36