XamlParseException, инициализирующий статический класс - PullRequest
1 голос
/ 14 октября 2010

У меня есть XamlParseException в некотором коде, который пытается выделить весь текст в TextBox.

Xaml:

Common: 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 ]

2 голосов
/ 14 октября 2010

Предполагая, что вы поймали это в отладчике, посмотрите на InnerException, который должен показать вам исключение, которое вызывает TypeInitializationException. Это должно дать вам больше подсказки, где искать.

Я вижу только одну строку, которая может быть проблемой, хотя:

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

Это единственный код, который будет выполняться в инициализаторе типа.

Я не вижу, что с ним не так, но я не очень хорошо знаком с регистрацией свойств зависимостей.

1 голос
/ 14 октября 2010

Тип intitializer (также известный как статический конструктор) запускает инициализаторы для ваших полей static.

Другими словами, инициализатор IsTextSelectedOnFocusProperty выдает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...