none
各位大虾,求助无法创建实例 RRS feed

  • 问题

  • public static readonly DependencyProperty ValueProperty
          = DependencyProperty.Register("Value", typeof(decimal), typeof(NumericUpDown), new FrameworkPropertyMetadata(1, new PropertyChangedCallback(OnValueChanged), new CoerceValueCallback(CoerceValue)));
    //断点调试,在到这句就会自动退出,注册的方式有错吗?1代表的是最小值,后面的   CoerceValue函数在控制值处在1~~10之间。   
    
    public decimal Value
        {
          get { return (decimal)GetValue(ValueProperty); }
          set { SetValue(ValueProperty, value); }
        }
        private static object CoerceValue(DependencyObject element, object value)
        {
          decimal newValue = (decimal)value;
          NumericUpDown control = (NumericUpDown)element;
          newValue = Math.Max(1, Math.Min(10, newValue));
          return newValue;
        }
        public static readonly RoutedEvent ValueChangedEvent =
          EventManager.RegisterRoutedEvent("ValueChanged", RoutingStrategy.Bubble,
          typeof(RoutedPropertyChangedEventHandler<decimal>), typeof(NumericUpDown));
    
        public event RoutedPropertyChangedEventHandler<decimal> ValueChanged
        {
          add { AddHandler(ValueChangedEvent, value); }
          remove { RemoveHandler(ValueChangedEvent, value); }
        }
        private static void OnValueChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
          NumericUpDown control = (NumericUpDown)obj;
          RoutedPropertyChangedEventArgs<decimal> e = new RoutedPropertyChangedEventArgs<decimal>
          ((decimal)args.OldValue, (decimal)args.NewValue, ValueChangedEvent);
          control.OnValueChanged(e);
        }
        protected virtual void OnValueChanged(RoutedPropertyChangedEventArgs<decimal> args)
        {
          RaiseEvent(args);
        }
    
    这个是在用户控件中写的注册依赖属性,求各位大虾帮忙,错就处在这里~~~,还有依赖属性和时间路由写在哪里比较好,是单拿一个文件还是就写在控件的cs文件里呢?
    请大家多支持学生专区~~
    2011年1月29日 3:49

答案

  • 你好 doukooo,

    问题出在:

    public static readonly DependencyProperty ValueProperty

              = DependencyProperty.Register("Value", typeof(decimal), typeof(NumericUpDown), new FrameworkPropertyMetadata((decimal)1, new PropertyChangedCallback(OnValueChanged), new CoerceValueCallback(CoerceValue)));

    你将参数“1”直接传进去是不可以的,因为默认情况下这个“1”的类型是System.Int32类型,但是你注册的类型是decimal,因此你要显示的类型转换,像我写的那样:

    (decimal)1”,这样你的代码就可以正常工作了,我已经在我电脑上尝试了你的问题,更改之后运行正常。

    另一方面,根据你的代码,我想你是想自己建立一个带有依赖属性路由事件NumericUpDown功能的UserControl。这个例子在MSDN上是有例子的,你可以下载并参考一下,关于你的第二个问题:

    -->还有依赖属性和时间路由写在哪里比较好,是单拿一个文件还是就写在控件的cs文件里呢

    这个我认为答案就在MSDN的这个例子里面,想它这样的定义就很比较好。例子的链接是:

    http://msdn.microsoft.com/zh-cn/library/ms771638(VS.85).aspx

    有个“DownLoad Sample”链接,点一下就可以下载了。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 doukooo 2011年1月30日 5:18
    2011年1月29日 7:35
    版主

全部回复

  • 你好 doukooo,

    问题出在:

    public static readonly DependencyProperty ValueProperty

              = DependencyProperty.Register("Value", typeof(decimal), typeof(NumericUpDown), new FrameworkPropertyMetadata((decimal)1, new PropertyChangedCallback(OnValueChanged), new CoerceValueCallback(CoerceValue)));

    你将参数“1”直接传进去是不可以的,因为默认情况下这个“1”的类型是System.Int32类型,但是你注册的类型是decimal,因此你要显示的类型转换,像我写的那样:

    (decimal)1”,这样你的代码就可以正常工作了,我已经在我电脑上尝试了你的问题,更改之后运行正常。

    另一方面,根据你的代码,我想你是想自己建立一个带有依赖属性路由事件NumericUpDown功能的UserControl。这个例子在MSDN上是有例子的,你可以下载并参考一下,关于你的第二个问题:

    -->还有依赖属性和时间路由写在哪里比较好,是单拿一个文件还是就写在控件的cs文件里呢

    这个我认为答案就在MSDN的这个例子里面,想它这样的定义就很比较好。例子的链接是:

    http://msdn.microsoft.com/zh-cn/library/ms771638(VS.85).aspx

    有个“DownLoad Sample”链接,点一下就可以下载了。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 doukooo 2011年1月30日 5:18
    2011年1月29日 7:35
    版主
  • thank you!

    还有一个问题想请教您一下~~怎么能很好的理解并且记忆依赖属性和路由事件的概念以及他们的具体用法~~?


    请大家多支持学生专区~~
    2011年1月30日 2:30
  • 你好 doukooo,

    如果我的回复解决了你的问题,你可以考虑标记我的回复为答复,如果觉得我的回复对你有帮助,你可以点击“绿色的小三角”来表示回复有帮助,这样有助于论坛上其他跟你有同样问题的成员,通过你的帖子找到答案。

    对于你的第二个问题:

    --> 怎么能很好的理解并且记忆依赖属性和路由事件的概念以及他们的具体用法~~

    我觉得你可以参照MSDN文档,比如:

    http://msdn.microsoft.com/zh-cn/library/ms752914.aspx   (依赖属性概述)

    http://msdn.microsoft.com/zh-cn/library/system.windows.dependencyproperty.aspx      (依赖属性)

    http://msdn.microsoft.com/zh-cn/library/ms742806.aspx     (路由事件,其中包含了很多其他有用的链接)

    我觉得通过上面的链接你可以掌握他们的概念和用法了。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年1月30日 4:15
    版主