none
Silverlithg求助: "未能从文本“1”创建“System.UInt16”"的错误. RRS feed

  • 问题

  • 1. 建立一个UserControl: 

      public partial class OwnerInfoCtrl : UserControl
      {
        public OwnerInfoCtrl()
        {
          InitializeComponent();
        }
    
        public UInt16 Head
        {
          get;set;
        }
      }
    

    2. 在别外一个MainPage.xaml中将OwnerInfoCtrl拖到MainPage中, 并在属性窗口中设置Head属性为1

      <Grid x:Name="LayoutRoot" Background="White">
        <my:OwnerInfoCtrl 
           HorizontalAlignment="Left" 
           Margin="12,12,0,0" 
           x:Name="ownerInfoCtrl1" VerticalAlignment="Top" 
           Height="89" 
           Width="98" 
           Head="1" />
      </Grid>

    3. 编译通过 , 但在运行时报出以下错误:

    "未能从文本“1”创建“System.UInt16”"的错误.

     

    这是什么错误??? 为何不能将1转为UInt16呢?    

    注: 如果将UInt16 改为 Int型的,运行一切正常...

    2010年12月23日 5:30

答案

  • 可能Silverlight没有提供默认的String到uint16的转换。你需要写自定义TypeConverter来解决类型转换问题

    converter

        public class MyTypeConverter:TypeConverter
        {
            public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
            {
                return base.CanConvertFrom(context, sourceType);
            }

            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                return (UInt16)int.Parse(value.ToString());
            }
        }

    control

         public partial class SilverlightControl1 : UserControl
        {
            public SilverlightControl1()
            {
                InitializeComponent();
            }

            [TypeConverter(typeof(MyTypeConverter))]
            public UInt16 Head
            {
                get;
                set;
            }

        }

    参阅相关文档

    http://msdn.microsoft.com/en-us/library/cc645047(v=vs.95).aspx

    谢谢,


    Mog Liang
    • 已标记为答案 Mog Liang 2010年12月30日 5:25
    2010年12月29日 8:53

全部回复

  • 请问为何一定要用Uint16?
    2010年12月26日 15:47
    版主
  • 可能Silverlight没有提供默认的String到uint16的转换。你需要写自定义TypeConverter来解决类型转换问题

    converter

        public class MyTypeConverter:TypeConverter
        {
            public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
            {
                return base.CanConvertFrom(context, sourceType);
            }

            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                return (UInt16)int.Parse(value.ToString());
            }
        }

    control

         public partial class SilverlightControl1 : UserControl
        {
            public SilverlightControl1()
            {
                InitializeComponent();
            }

            [TypeConverter(typeof(MyTypeConverter))]
            public UInt16 Head
            {
                get;
                set;
            }

        }

    参阅相关文档

    http://msdn.microsoft.com/en-us/library/cc645047(v=vs.95).aspx

    谢谢,


    Mog Liang
    • 已标记为答案 Mog Liang 2010年12月30日 5:25
    2010年12月29日 8:53