2009-12-15 2 views
2

У меня вопрос, похожий на это - Does Silverlight xaml support Byte Data Type. Поддерживает ли Silverlight xaml тип данных Guid. Я пытаюсь установить Guid в моем xaml, который объявлен как свойство в библиотеке классов C#. Это возможно? Я попытался с помощьюdoes silverlight 3 поддерживает GUID в xaml?

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

и используя

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

, но это не работает!

Просьба предложить, если для этого есть работа.

Заранее спасибо
Саи

ответ

5

Произведение раунд будет действительно зависеть от того, почему вы хотите включить сырой Guid в Xaml в первую очередь.

Вы не можете использовать 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" /> 
+0

Спасибо! Я попробую это! – Sai

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

Джим McCurdy

YinYangMoney

+0

Спасибо! легкий подход, но вроде грязный ... но я обязательно попробую это! – Sai

Смежные вопросы