【问题标题】:Attached Property: 'System.TypeInitializationException' when setting default value附加属性:设置默认值时的“System.TypeInitializationException”
【发布时间】:2010-01-20 14:28:57
【问题描述】:

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

“System.ArgumentException”类型的第一次机会异常发生在 WindowsBase.dll 中

在 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' 属性的默认值不能绑定到特定线程。”

【问题讨论】:

    标签: c# wpf attached-properties argumentexception


    【解决方案1】:

    当静态构造函数中发生异常时,通常会抛出 TypeInitializationException 类型的异常。看那里。

    另外,从内部异常来看:

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

    这通常意味着您的属性不是线程安全的(例如,不继承自 System.Windows.Freezable)。查看thread 了解详细信息,查看MSDN 了解有关依赖属性默认值的详细信息。

    【讨论】:

    • 确实,对于新的内部异常,我发现了同样的事情(起初我没有得到那个内部异常,因为我在 window_load 中设置了值)。当我从 Freezable 继承时,我无法再从我的 clsPersoon 类中的 DependencyObject 继承...我现在必须选择使用哪一个,并且丢失 DependencyObject 有什么缺点吗?
    • @Avalon: Freezable 继承自 DependencyObject
    • 哦,我明白了,没想到那么远,我是过失。谢谢你们!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2012-04-07
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多