您好我有一个Usercontrol,它有一个带有' ValidatesOnExceptions'的文本框。设为真
<TextBox.Text>
<Binding ElementName="_this"
Path="VisibleValue"
UpdateSourceTrigger="PropertyChanged"
Mode="TwoWay"
ValidatesOnExceptions="True">
</Binding>
</TextBox.Text>
在代码隐藏中我有代码,它会尝试将输入转换为int,double ...
private void SetValue(String visibleValue)
{
Object value = null;
if (!String.IsNullOrEmpty(visibleValue)) {
TypeCode typeCode = Type.GetTypeCode(Type);
try {
switch (typeCode) {
case TypeCode.Byte: {
Byte outValue = Byte.Parse(visibleValue, CultureInfo.InvariantCulture);
value = outValue;
break;
}
case TypeCode.Decimal: {
Decimal outValue = Decimal.Parse(visibleValue, CultureInfo.InvariantCulture);
value = outValue;
break;
}
}
}
catch (Exception ex) {
if (value == null) {
HasValidValue = false;
}
else {
HasValidValue = true;
}
throw ex;
}
}
Value = value;
if (Value == null) {
HasValidValue = false;
throw new ArgumentNullException("Input text was null.");
}
else {
HasValidValue = true;
}
不要因为尝试而感到困惑。我再次抛出了这个例外。我不明白的事情是:当Parse方法抛出一个异常它被处理时,我的程序继续运行,文本框将得到一个红色边框。
但是&#39; ArgumentNullException&#39;我进一步向下扔没有得到处理。任何人都可以向我解释这个问题吗,并且如果在这个地方值为null,那么我是否可以获得相同的红色边框,就像Parse方法抛出异常一样?
提前致谢
编辑:如果我抛出FormatException而不是ArgumentNullException,一切正常。那是为什么?