2009-12-15 40 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