附加属性:“System.TypeInitializationException”设置默认值时
我想设置附加属性的默认值,但是当我这样做时,我得到:
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 个字符串构造函数的非常简单的类。
编辑:当尝试通过单击事件而不是 window_load 设置属性时,我收到以下内部异常:“‘Eigenaar’属性的默认值无法绑定到特定线程。”
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通常,当静态构造函数中发生异常时,会引发
TypeInitializationException
类型的异常。看看那里。另外,从内部异常来看:
这通常意味着您的属性不是线程安全的(例如,不继承自
System.Windows.Freezable
)。检查此线程 详细信息和 MSDN有关依赖项属性的默认值的详细信息。Typically exceptions of type
TypeInitializationException
are thrown when an exception occurs in the static constructor. Look there.Also, from the inner exception:
This usually means that your property is not thread-safe (e.g., doesn't inherit from
System.Windows.Freezable
). Check this thread for gory details and MSDN for details about default values for dependency properties.