2009-12-15 38 views
2

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

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

,并使用

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

但不工作!

请建议是否有解决此问题的方法。

在此先感谢
西

回答

5

一个工作一轮真的取决于你为什么要包括在XAML原始的Guid摆在首位。

由于Xaml无法知道如何将元素的内容转换为Guid结构的实例,因此无法按照您尝试的方式使用sys: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" /> 
+0

谢谢!我会试试这个! – Sai 2009-12-16 11:47:25

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); 

吉姆·麦柯迪

YinYangMoney

+0

谢谢!简单的方法,但有点杂乱......但我一定会尝试这个! – Sai 2009-12-16 11:49:07