好的,我有点奇怪的错误......
这很好用:
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;
}
另外,它不允许我调试它;它会在程序加载时崩溃。如果我把一个断点放在它没有击中的地方;它只是马上出错。
答案 0 :(得分:34)
事件可能在元素完全加载或引用仍未设置之前引发,因此例外。如果引用不是null
且IsLoaded
是true
,请尝试仅设置属性。
答案 1 :(得分:4)
要诊断此问题,请将导致TargetInvocationException的代码行放在try块中。
要解决此类错误,请获取内部异常。这可能是由于许多不同的问题。
try
{
// code causing TargetInvocationException
}
catch (Exception e)
{
if (e.InnerException != null)
{
string err = e.InnerException.Message;
}
}
答案 2 :(得分:0)
我认为如果你声明一个实现了INotifyPropertyChanged的属性,然后将数据绑定IsChecked
,SelectedIndex
(使用IValueConverter)和Fill
(使用IValueConverter)声明为它而不是使用Checked Event切换SelectedIndex
和Fill
。
答案 3 :(得分:0)
如果在完全加载窗口的内容之前发生无线电按钮检查事件,即完全加载椭圆,则将抛出这种异常。因此,请检查窗口的UI是否已加载(可能是Window_ContentRendered事件等)。
答案 4 :(得分:0)
这通常是由尝试处理空对象引起的。 例如,尝试清空null的Bindable列表将触发异常:
public class MyViewModel {
[BindableProperty]
public virtual IList<Products> ProductsList{ get; set; }
public MyViewModel ()
{
ProductsList.Clear(); // here is the problem
}
}
这可以通过检查null来轻松解决:
if (ProductsList!= null) ProductsList.Clear();