我有一个类似的问题 - Does Silverlight xaml support Byte Data Type。 silverlight xaml是否支持Guid数据类型。我试图在我的xaml中设置Guid,这是c#类库中声明的属性。这可能吗?我尝试使用
xmlns:sys="clr-namespace:System;assembly=mscorlib"
并使用
<sys:Guid>F16095D1-1954-4C33-A856-2BDA87DFD371</sys.Guid>
但那不起作用!
请建议是否有解决方法。
提前致谢
西
答案 0 :(得分:5)
工作回合真的取决于你为什么要首先在Xaml中包含原始Guid。
您不能以您尝试的方式使用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" />
答案 1 :(得分: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);
Jim McCurdy