2009-12-15 4 views
2

J'ai une question similaire à celle-ci - Does Silverlight xaml support Byte Data Type. Silverlight xaml prend-il en charge le type de données Guid. J'essaye de placer Guid dans mon xaml qui est une propriété déclarée dans la bibliothèque de classe C#. Est-ce possible? J'ai essayé d'utilisersilverlight 3 prend-il en charge GUID dans xaml?

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

et en utilisant

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

mais qui ne fonctionne pas!

S'il vous plaît suggérer des alternatives.

Merci à l'avance
Sai

Répondre

5

Un tour de travail serait vraiment dépendre de la raison pour laquelle vous souhaitez inclure une Guid cru en XAML en premier lieu.

Vous ne pouvez pas utiliser sys:Guid comme vous le souhaitez car Xaml n'a aucun moyen de savoir comment convertir le contenu de l'élément en une instance d'une structure Guid. En fait, vous ne pouvez pas inclure un sys:Guid vide bien que je ne sais pas pourquoi vous ne pouvez pas faire cela (pas qu'il serait utile de le faire de toute façon).

Toutefois, si vous essayez d'affecter une valeur à une propriété sur une instance d'un type que vous contrôlez, vous pouvez contourner ce problème avec un convertisseur de type. Tout d'abord ajouter un GuidConverter à votre projet: -

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

    } 
} 

décorer maintenant la propriété de votre type avec un attribut TypeConverter:

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

Maintenant dans votre XAML vous pouvez le faire: -

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

Merci! Je vais essayer ça! – Sai

0

Une solution beaucoup plus simple consiste à utiliser le type sys:string à la place.

j'ai ajouté le XAML suivant dans un dictionnaire de ressources, et n'a eu aucun problème d'extraction en code 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

+0

Merci! approche facile mais un peu désordonné ... mais je vais sûrement essayer ça! – Sai

Questions connexes