数值类型为DependencyProperty

时间:2014-06-05 12:29:50

标签: c# .net wpf dependency-properties

如何注册基于数字类型的自定义属性?

public class NumberBox : TextBox
    {
        public static readonly DependencyProperty FormatProperty = DependencyProperty.Register("FormatValue", typeof(Type), typeof(NumberBox), new UIPropertyMetadata(default(Double)));
        public Type FormatValue
        {
            get
            {
                return (Type)GetValue(FormatProperty);
            }
            set
            {
                SetValue(FormatProperty, value);
            }
        }
   }

XAML

<nb:NumberBox FormatValue="{System:Int32}"/>

我确信,这并不完美,但我真的不知道它是如何可行的。

更新:

基本上,我需要一种方法来设置我的号码框的类型。例如,如果我需要使用Double NumberBox,我只需设置FormatValue="Double"

2 个答案:

答案 0 :(得分:1)

第一个问题是 DP标识符的最后一个参数中提供的默认元数据不正确

而不是

new UIPropertyMetadata(default(Double))

应该是

new UIPropertyMetadata(typeof(Double))

XAML中的

第二个问题。使用 x:Type 传递类型。

<nb:NumberBox xmlns:sys="clr-namespace:System;assembly=mscorlib"
              FormatValue="{x:Type sys:Int32}"/>

答案 1 :(得分:0)

从这里http://msdn.microsoft.com/en-us/library/ee792002%28v=vs.110%29.aspx开始,类型为x:Int32x:Double,...

所以你想使用:

 <nb:NumberBox FormatValue="{x:Type x:Int32}"/>

在一般意义上,您必须在XAML中包含命名空间:

 <Window ...
         xmlns:ns="clr-namespace:MyNamepsace;assembly=MyAssembly"
         >

     <nb:NumberBox FormatValue="{x:Type ns:MyType}"/>
 </Window>