2010-01-20 4 views
1

Я хочу, чтобы установить значение по умолчанию моей Attached собственности, но когда я делаю, я получаю:Attached Property: «System.TypeInitializationException» при установке значения по умолчанию

первого шанса исключение типа «System.ArgumentException 'произошло в WindowsBase.dll

Первый шанс исключение типа „System.TypeInitializationException“ произошло в Oef_AttDepProp.exe

Без значения по умолчанию, все работает отлично. Это пример кода, я использовал:

public static readonly DependencyProperty IsEigenaarProperty = DependencyProperty.RegisterAttached(
"Eigenaar", typeof(clsPersoon), typeof(UIElement), 
new UIPropertyMetadata(new clsPersoon("test", "test"), PropertyChanged)); 

[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
[Browsable(true)] 
public clsPersoon Eigenaar 
{ 
get 
{ 
    return _persoon; 
} 
set 
{ 
    _persoon = value; 
} 
} 

public static void SetEigenaar(UIElement element, clsPersoon value) 
{ 
element.SetValue(IsEigenaarProperty, value); 
} 

public static clsPersoon GetEigenaar(UIElement element) 
{ 
return (clsPersoon)element.GetValue(IsEigenaarProperty); 
} 

private static void PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) 
{ 
if (obj is Window1) 
    ((Window1)obj).Title = GetEigenaar(((Window1)obj)).ToString(); 
} 

Это «новый clsPersoon (» тест «„тест“)», который, как представляется, является причиной проблемы, но это лишь очень простой класс с 2-строка-конструктор.

Edit: При попытке установить свойство через событие щелчка, вместо window_load, я получаю InnerException из: «Значение по умолчанию для имущества„Eigenaar“не может быть привязан к конкретной теме»

ответ

2

Обычно исключения типа TypeInitializationException выбрасываются, когда в статическом конструкторе возникает исключение. Искать там.

Кроме того, из внутреннего исключения:

Значение по умолчанию для Eigenaar собственности не может быть привязано к конкретной теме.

Это обычно означает, что ваше свойство не является потокобезопасным (например, не наследует от System.Windows.Freezable). Проверьте это thread для подробностей gory и MSDN для получения информации о значениях по умолчанию для свойств зависимостей.

+0

Действительно, с новым внутренним исключением я нашел то же самое (сначала я не получил это внутреннее исключение, потому что я установил значение в window_load). Когда я наследую от Freezable, я больше не могу унаследовать от DependencyObject в моем классе clsPersoon, хотя ... Должен ли я теперь выбирать, какой из них использовать, и что потерять DependencyObject имеет какие-то недостатки? – Xuntar

+0

@ Авалон: 'Freezable' наследуется от' DependencyObject'. – jason

+0

Ой, я вижу, не думал, что далеко, mea culpa. Спасибо вам обоим! – Xuntar