wpf - ComboBox崩溃WPF应用程序,因为SelectionChanged触发得太早

标签 wpf xaml combobox crash nullreferenceexception

这是我的XAML:

<ComboBox x:Name="cloneSelector"
          Width="80"
          SelectedIndex="0"
          VerticalAlignment="Top"
          Margin="10"
          SelectionChanged="cloneSelector_SelectionChanged">
    <ComboBoxItem Content="All" />
    <ComboBoxItem Content="Top" />
    <ComboBoxItem Content="Middle" />
    <ComboBoxItem Content="Bottom" />
    <ComboBoxItem Content="None" />
</ComboBox>

这是SelectionChanged处理程序(按注释的要求):
cloneSelection = (CloneFormat) cloneSelector.SelectedIndex;

var frameSize = videoDevice.VideoResolution.FrameSize;

    switch (cloneSelection)
    {
        case CloneFormat.Top:
            cloneRect = new Rectangle(0, 0, frameSize.Width, (frameSize.Width* 9) / 16);
            break;
        case CloneFormat.Middle:
            cloneRect = new Rectangle(0, 100, frameSize.Width, (frameSize.Width* 9) / 16);
            break;
        case CloneFormat.Bottom:
            cloneRect = new Rectangle(0, 200, frameSize.Width, (frameSize.Width* 9) / 16);
            break;
        default:
            cloneRect = new Rectangle(0, 0, frameSize.Width, frameSize.Height);
            break;
    }

如果删除了SelectedIndexSelectionChanged处理程序或ComboBoxItems,我的应用程序将运行。问题似乎是处理程序过早访问cloneSelector并引发空对象异常。是否有一种简单的方法来防止这种行为,同时仍保持我的功能(即,SelectedIndex不从-1开始)?

另外,如果我不经常测试我的项目,我将不知道该怎么做才能破坏它。它可以成功构建,并且可以静默失败。调试时,“未加载符号”设计器中的“未处理的异常”框显示
System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'

Inner Exception

NullReferenceException: Object reference not set to an instance of an object.

而且我可以看到它是在PresentationFramework.dll中抛出的,但是它没有提供任何有关null或导致错误的信息。如何获得更好的调试信息,即告诉我ComboBox是崩溃的根源?

最佳答案

原来我的ComboBox甚至不是空引用,它是我的视频分辨率对象。更何况我需要更具体的调试信息。

关于wpf - ComboBox崩溃WPF应用程序,因为SelectionChanged触发得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44051514/

相关文章:

wpf - 将 ContentControl 绑定(bind)到 WPF 中的深层路径

java - 从组合框获取值(value)到jsp中的servlet

c# - 如何在 XAML 中将全局枚举分配为标记值?

WPF 路径命令

javascript - 从每个组合框中选择一个选项

c# - 自动完成导致文本向右滚动

wpf - 使用 SelectionMode = Multiple 对 ListBox 进行数据绑定(bind)

c# - 仅作为时间将时间字符串转换为 24 小时制

c# - 绑定(bind)到另一个命名空间中的属性?

WPF 绑定(bind)双向数据网格