XamlParseException初始化一个静态类

时间:2010-10-14 12:21:49

标签: c# wpf

我在某些代码中有一个XamlParseException,试图选择TextBox中的所有文字。

的Xaml:

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

代码背后:

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'注册。

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

2 个答案:

答案 0 :(得分:2)

假设您已在调试器中发现此问题,请查看InnerException,其中应显示导致TypeInitializationException的异常。这应该会让你更多地看到在哪里看。

我只能看到可能成为问题的一行:

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

这是在类型初始值设定项中执行的唯一代码。

我无法直接看到它出了什么问题,但后来我对注册依赖属性并不是很熟悉。

答案 1 :(得分:1)

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

换句话说,IsTextSelectedOnFocusProperty初始化程序正在抛出异常。

相关问题