Silverlight 3 поддерживает GUID в xaml? - PullRequest
2 голосов
/ 15 декабря 2009

У меня есть вопрос, подобный этому - Поддерживает ли Silverlight xaml тип данных байтов . Поддерживает ли silverlight xaml тип данных Guid. Я пытаюсь установить Guid в моем xaml, который объявлен как свойство в библиотеке классов c #. Это возможно? Я пытался использовать

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

и использование

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 15 декабря 2009

Рабочий раунд действительно будет зависеть от того, почему вы хотите включить сырого 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 голосов
/ 16 декабря 2009

Гораздо более простое решение - использовать тип 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

...