1

我想设置我的附加属性的默认值,但是当我这样做时:

WindowsBase.dll 中出现了“System.ArgumentException”类型的第一次机会异常

在 Oef_AttDepProp.exe 中发生了“System.TypeInitializationException”类型的第一次机会异常

没有默认值,一切正常。这是我使用的一些示例代码:

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

似乎是“new clsPersoon("test", "test")" 导致问题的原因,但这只是一个非常简单的类,它有一个 2-string-constructor。

编辑:当尝试通过单击事件而不是 window_load 设置属性时,我得到一个 innerException:“'Eigenaar' 属性的默认值不能绑定到特定线程。”

4

1 回答 1

2

TypeInitializationException当静态构造函数中发生异常时,通常会引发类型异常。看这里。

此外,从内部异常:

该属性的默认值Eigenaar不能绑定到特定线程。

这通常意味着您的属性不是线程安全的(例如,不继承自System.Windows.Freezable)。检查此线程以获取血淋淋的详细信息,并查看MSDN以获取有关依赖项属性的默认值的详细信息。

于 2010-01-20T14:39:45.977 回答