我在某些代码中有一个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'注册。
这是在创建静态类时注册的 - 那么如何才能注册两次?
答案 0 :(得分:2)
假设您已在调试器中发现此问题,请查看InnerException
,其中应显示导致TypeInitializationException
的异常。这应该会让你更多地看到在哪里看。
我只能看到可能成为问题的一行:
public static readonly DependencyProperty IsTextSelectedOnFocusProperty =
DependencyProperty.RegisterAttached("IsTextSelectedOnFocus",
typeof(bool),
typeof(SelectAllTextOnFocus),
new UIPropertyMetadata(false, OnIsTextSelectedOnFocusChanged));
这是在类型初始值设定项中执行的唯一代码。
我无法直接看到它出了什么问题,但后来我对注册依赖属性并不是很熟悉。
答案 1 :(得分:1)
类型初始值设定项(也称为静态构造函数)运行static
字段的初始值设定项。
换句话说,IsTextSelectedOnFocusProperty
初始化程序正在抛出异常。