PresentationFramework.dll中发生’System.Reflection.TargetInvocationException’
好的,我有点奇怪的错误……
这很好用:
private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs e) { //comboBoxNormalPoint.SelectedIndex = 0; //ellipsePoint.Fill = System.Windows.Media.Brushes.Black; }
这会抛出System.Reflection.TargetInvocationException
:
private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs e) { comboBoxNormalPoint.SelectedIndex = 0; ellipsePoint.Fill = System.Windows.Media.Brushes.Black; }
另外,它不允许我调试它; 它会在程序加载时崩溃。 如果我把一个断点放在它没有击中的地方; 它只是错误立即。
事件可能在元素完全加载或引用仍未设置之前引发,因此例外。 如果引用不为null
且IsLoaded
为true
则仅尝试设置属性。
要诊断此问题,请将导致TargetInvocationException的代码行放在try块中。
要解决此类错误,请获取内部exception。 这可能是由于许多不同的问题。
try { // code causing TargetInvocationException } catch (Exception e) { if (e.InnerException != null) { string err = e.InnerException.Message; } }
如果你声明一个实现了INotifyPropertyChanged的属性,然后使用数据绑定IsChecked
, SelectedIndex
(使用IValueConverter)和Fill
(使用IValueConverter)而不是使用Checked事件来切换SelectedIndex
和Fill
我认为你会遇到更少的问题。
这通常是由尝试处理null对象引起的。 例如,尝试清空null的Bindable列表将触发exception:
public class MyViewModel { [BindableProperty] public virtual IList ProductsList{ get; set; } public MyViewModel () { ProductsList.Clear(); // here is the problem } }
通过检查null可以很容易地解决这个问题:
if (ProductsList!= null) ProductsList.Clear();
如果在完全加载窗口的内容之前发生无线电按钮检查事件,即完全加载椭圆,则将抛出这种exception。 因此,检查是否加载了窗口的UI(可能是Window_ContentRendered事件等)。