TL; DR - У меня проблема с прохождением системных типов в качестве значения для параметра "Тип" в Silverlight. Это какая-то известная проблема? Это вообще возможно?
Подробно:
В моем управлении у меня есть свойство зависимости типа Type
. И есть проблема с передачей типов из пространства имен System
, таких как int(Int32)
, string(String)
, Guid
, decimal(Decimal)
, bool(Boolean)
. В этих случаях свойство depencency получает null
значение (значение по умолчанию для свойства depencency устанавливается на некоторое непустое значение, поэтому я вижу в событии OnPropertyChanged, что null
передан). Для других типов он работает без проблем.
Вот код моего свойства зависимостей:
public static readonly DependencyProperty SomeTypeProperty = DependencyProperty.Register(
"SomeType", typeof(Type), typeof(Control1), new PropertyMetadata(typeof(EmptyType), OnSomeTypePropertyChanged));
public Type SomeType
{
get { return (Type)GetValue(SomeTypeProperty); }
set { SetValue(SomeTypeProperty, value); }
}
И использование управления:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
[...]
<sl1:Control1 SomeType="sys:Boolean" />
Что интересно - он работает в дизайне XAML в Visual Studio. Я знаю это, отображая значение свойства, поэтому переданный тип в моем контрольном содержимом Control1
. Но в среде выполнения Silverlight он не работает.
Я не знаю, почему это происходит... Однако, здесь обходной путь.
Создайте следующий класс:
public class TypeOfRes
{
public object Object { get; set; }
public Type TypeOf
{
get { return Object == null ? null : Object.GetType(); }
}
}
Создайте на своей странице следующий ресурс:
<local:TypeOfRes x:Key="booleanRes">
<local:TypeOfRes.Object>
<sys:Boolean>True</sys:Boolean>
</local:TypeOfRes.Object>
</local:TypeOfRes>
Ссылка ресурса в вашей собственности:
<local:SilverlightControl1 MyType="{Binding Source={StaticResource booleanRes},Path=TypeOf}"/>