2010-10-14 91 views
1

我有一个XamlParseException在一些代码试图选择TextBox中的所有文本。XamlParseException初始化一个静态类

的XAML:

常见:SelectAllTextOnFocus.IsTextSelectedOnFocus = “真”/>

后面的代码:

public static class SelectAllTextOnFocus 
{ 
    public static readonly DependencyProperty IsTextSelectedOnFocusProperty = DependencyProperty.RegisterAttached("IsTextSelectedOnFocus", typeof(bool), typeof(SelectAllTextOnFocus), new UIPropertyMetadata(false, OnIsTextSelectedOnFocusChanged)); 

    public static bool GetIsTextSelectedOnFocus(TextBox item) 
    { 
     return (bool)item.GetValue(IsTextSelectedOnFocusProperty); 
    } 

    public static void SetIsTextSelectedOnFocus(TextBox item, bool value) 
    { 
     item.SetValue(IsTextSelectedOnFocusProperty, value); 
    } 

    static void OnIsTextSelectedOnFocusChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e) 
    { 
     var item = depObj as TextBox; 
     if (item == null) 
     { 
      return; 
     } 

     if (e.NewValue is bool == false) 
     { 
      return; 
     } 

     if ((bool)e.NewValue) 
     { 
      item.GotFocus += OnGotFocus; 
     } 
     else 
     { 
      item.GotFocus -= OnGotFocus; 
     } 
    } 

我得到一个XmalParseException,与消息:“的类型初始Common.SelectAllTextOnFocus'抛出一个异常。

任何想法是什么导致了这一点,或者如何去调试呢?

内部异常是:'IsTextSelectedOnFocus'属性已被'SelectAllTextOnFocus'注册。

这是在创建静态类时注册的 - 那么它如何被注册两次?

+0

有什么'InnerException.InnerException'? – SLaks 2010-10-14 12:26:00

+0

我已经添加了内部异常消息。 – 2010-10-14 12:33:28

回答

2

假设你在调试器中抓住了这个,看看InnerException,这应该告诉你这导致TypeInitializationException例外。这应该给你更多的暗示在哪里看。

,我只能看到一个线,可能是,虽然这个问题:

public static readonly DependencyProperty IsTextSelectedOnFocusProperty = 
    DependencyProperty.RegisterAttached("IsTextSelectedOnFocus", 
     typeof(bool), 
     typeof(SelectAllTextOnFocus), 
     new UIPropertyMetadata(false, OnIsTextSelectedOnFocusChanged)); 

那这将在类型初始化执行的唯一代码。

我看不出它有什么问题,但是我不熟悉注册依赖属性。

+1

这是问题 - 有一个第二类已明确被复制和粘贴它仍试图注册到原来的类类型。 – 2010-10-14 12:37:42

+0

@杰克逊:非常好 - 很高兴你找到了:) – 2010-10-14 12:46:13

1

intitializer类型(也称为静态构造函数)为您的static字段运行初始值设定项。

换句话说,IsTextSelectedOnFocusProperty初始值设定项会引发异常。