1

添付プロパティのデフォルト値を設定したいのですが、そうすると次のようになります。

タイプ '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();
}

問題の原因と思われるのは「new clsPersoon("test", "test")」ですが、それは 2 文字列コンストラクタを持つ非常に単純なクラスにすぎません。

編集: window_load の代わりにクリック イベントを介してプロパティを設定しようとすると、次の innerException が発生します。

4

1 に答える 1

2

通常TypeInitializationException、静的コンストラクターで例外が発生すると、型の例外がスローされます。あっち見て。

また、内部例外から:

プロパティのデフォルト値をEigenaar特定のスレッドにバインドすることはできません。

これは通常、プロパティがスレッド セーフではないことを意味します (たとえば、 から継承されませんSystem.Windows.Freezable)。詳細についてはこのスレッドを確認し、依存関係プロパティの既定値の詳細についてはMSDNを確認してください。

于 2010-01-20T14:39:45.977 に答える