请问Silverlight的XAML支持字节数据类型?(Does Silverlight XAML

2019-06-27 06:33发布

这里是我的数据类型:

using System;

namespace UI 
{
    public class AddressType
    {
        public byte ID { get; set; }
        public string Name { get; set; }
    } 
}

这里是我的收藏:

using System.Collections.ObjectModel;

namespace UI
{
    public class AddressTypes : ObservableCollection<AddressType>
    {
    }
}
Here is my XAML from my UserControl.Resources section of my page:

<本地:AddressTypes X:名称= “AddressTypesList”>

    <local:AddressType ID="0" Name="Select"/>
    <local:AddressType ID="1" Name="Office"/>
    <local:AddressType ID="2" Name="Shipping"/>
    <local:AddressType ID="3" Name="Warehouse"/>
    <local:AddressType ID="4" Name="Home"/>
    <local:AddressType ID="5" Name="Foreign"/>

</local:AddressTypes>

当我尝试在XAML值分配给ID属性,我得到一个AG_E_PARSER_BAD_PROPERTY_VALUE [行:10职位:35]错误。 如果我更改ID属性的数据类型为int,一切都很好。 不支持Silverlight的字节数据类型?

Answer 1:

指定使用属性语法字节值不出现工作。 但是,它可以指定使用属性元素语法字节值。 添加以下xmlns声明:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

该你应该能够像这样指定字节属性:

<local:AddressType Name="Select">
  <local:AddressType.ID>
    <sys:Byte>0</sys:Byte>
  </local:AddressType.ID>
</local:AddressType>

这是一种凌乱的,所以你可以做的是实现一个自定义类型转换器,和你的财产标记与属性使用该类型转换器。

该类型转换器应该是这个样子:

public class ByteTypeConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return sourceType == typeof(string);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
    {
        if (value is string)
        {
            return Byte.Parse(value as string);
        }
        else
        {
            return base.ConvertFrom(context, culture, value);
        }
    }
}

然后您想修改类以便将财产分给这个类型转换器:

public class AddressType
{
    [TypeConverter(typeof(ByteTypeConverter))]
    public byte ID { get; set; }
    public string Name { get; set; }
}

现在,你应该能够使用普通的属性属性语法:

<local:AddressType ID="0" Name="Select"/>


Answer 2:

我可以想象,为了节省空间,在下载运行时,XAML解析器仅支持XAML中的数字,因此,您所看到的行为整数。 为了使XAML分析器知道如何分析它需要明白,首先需要输入代码中的XAML -这可能是因为它实际上并没有考虑到这一点,因此能始终解析使用类似int.Parse

如果解析器不支持字节,但不能以这种方式,您可以通过使用16进制指定ID或使用元素符号,而不是属性,如设置属性对其进行测试:

<local:AddressType Name="Select">
  <ID>0x00</ID>
</local:AddressType>


文章来源: Does Silverlight XAML Support The Byte Data Type?