C# 未处理WPF异常

C# 未处理WPF异常,c#,wpf,C#,Wpf,嗨,我有一个Usercontrol,它有一个文本框,其中“ValidatesOnExceptions”设置为true <TextBox.Text> <Binding ElementName="_this" Path="VisibleValue" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" ValidatesO

嗨,我有一个Usercontrol,它有一个文本框,其中“ValidatesOnExceptions”设置为true

<TextBox.Text>
    <Binding ElementName="_this"
             Path="VisibleValue"
             UpdateSourceTrigger="PropertyChanged"
             Mode="TwoWay"
             ValidatesOnExceptions="True">
    </Binding>
</TextBox.Text>
不要被试…抓弄糊涂了。我再次抛出捕获的异常。我不明白的是:当Parse方法抛出异常时,它将得到处理,我的程序将继续运行,文本框将得到一个红色边框

但我进一步抛出的“ArgumentNullException”没有得到处理。有人能给我解释一下吗?有人有没有解决办法,如果这里的值为null,我怎么能得到与Parse方法抛出异常时相同的红色边框

提前谢谢


编辑:如果我抛出FormatException而不是ArgumentNullException,一切都会正常工作。这是为什么?

您没有用于抛出新ArgumentNullException的catch块,那么为什么您希望它自己处理?设置一个DataTrigger,一旦值为null,您就设置一个红色边框。@YuvalItzchakov我真的不想这样做,必须有一种方法使用异常这是正常的控制流场景吗?这意味着在某些情况下该值可以为空吗?什么?我不明白
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;
        }