Silverlight 3支持xaml中的GUID吗?

时间:2009-12-15 10:08:20

标签: silverlight silverlight-3.0

我有一个类似的问题 - Does Silverlight xaml support Byte Data Type。 silverlight xaml是否支持Guid数据类型。我试图在我的xaml中设置Guid,这是c#类库中声明的属性。这可能吗?我尝试使用

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

并使用

<sys:Guid>F16095D1-1954-4C33-A856-2BDA87DFD371</sys.Guid> 

但那不起作用!

请建议是否有解决方法。

提前致谢
西

2 个答案:

答案 0 :(得分: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);
        }

    }
}

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

[TypeConverter(typeof(GuidConverter))]
public Guid MyGuidValue {get; set; }

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

<local:MyType MyGuidValue="F16095D1-1954-4C33-A856-2BDA87DFD371" />

答案 1 :(得分:0)

更简单的解决方案是使用sys:string类型。

我将以下XAML添加到资源字典中,并且在使用C#代码中提取它时没有任何问题:

XAML

<sys:String x:Key="MyGuid">F16095D1-1954-4C33-A856-2BDA87DFD371</sys:String>

C#:

string guidString = Application.Current.Resources["MyGuid"] as string;
Guid guid = new Guid(guidString);

Jim McCurdy

YinYangMoney