Silverlight 3支持xaml中的GUID吗?

Sai*_*Sai 2 silverlight silverlight-3.0

我有一个类似的问题 - Silverlight xaml是否支持字节数据类型.silverlight xaml是否支持Guid数据类型.我试图在我的xaml中设置Guid,这是c#类库中声明的属性.这可能吗?我试过用

xmlns:sys="clr-namespace:System;assembly=mscorlib"
Run Code Online (Sandbox Code Playgroud)

和使用

<sys:Guid>F16095D1-1954-4C33-A856-2BDA87DFD371</sys.Guid> 
Run Code Online (Sandbox Code Playgroud)

但那不行!

请建议是否有解决方法.

在此先感谢
Sai

Ant*_*nes 5

一轮工作将真正取决于你为什么要首先在Xaml中包含原始Guid.

您不能sys:Guid以您尝试的方式使用,因为Xaml无法知道如何将元素的内容转换为Guid结构的实例.事实上,你不能包括空,sys:Guid虽然我不知道为什么你不能这样做(并不是说它无论如何都会有用).

但是,如果您尝试为您控制的类型的实例上的属性赋值,则可以使用类型转换器对此进行处理.首先GuidConverter在项目中添加一个: -

using System;
using System.ComponentModel;
using System.Globalization;

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

        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            return destinationType == typeof(string); 
        }

        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            return new Guid((string)value);
        }

        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            return ((Guid)value).ToString("", culture);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

现在用TypeConverter属性装饰你的类型的属性:

[TypeConverter(typeof(GuidConverter))]
public Guid MyGuidValue {get; set; }
Run Code Online (Sandbox Code Playgroud)

现在你的xaml你可以这样做: -

<local:MyType MyGuidValue="F16095D1-1954-4C33-A856-2BDA87DFD371" />
Run Code Online (Sandbox Code Playgroud)