在我的工作地点,我们最近将我们的代码库从.Net 3.5升级到.Net 4(C#).遇到的大多数问题已经解决,但是这个我无法弄清楚.我们通过混合使用xaml和代码来初始化控件和页面(基于开发人员首选项),但是一个页面在打开时会抛出NullReferenceException.这是一段代码片段(许多控件之一)抛出.
抛出异常的所有代码都在DataTemplate中(我认为这可能是相关的)
- <TextBox x:Name="Values" Grid.Column="1" Grid.Row="0" Margin="5,2,5,2"
- Text="{Binding ElementName=Descriptions,Path=SelectedValue,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,Converter={StaticResource EmptyConverter}}"
- GotFocus="Column_GotFocus"
- MinWidth="100"
- CharacterCasing="Upper"
- Visibility="{Binding Path=IsValueVisible,Converter={StaticResource VisibilityConverter}}"
- />
现在,投掷线是:
- GotFocus="Column_GotFocus"
Column_GotFocus位于代码隐藏文件中.
还有一些事实:我们在迁移之前没有遇到任何问题,异常会连续抛出,并且有三个不同的事件导致了这个问题.
投掷的三个事件是:
- GotFocus="Column_GotFocus"
- SelectionChanged="Descriptions_SelectionChanged"
- Click="Search_Click"
删除这些可以完全解决我们的问题,但显然会导致软件出现功能问题.有谁知道可能导致这些问题的原因是什么?
编辑:
对不起,澄清一下:永远不会调用事件处理程序,xaml事件处理程序添加(例如GotFocus =“Column_GotFocus”)似乎是抛出异常的地方.
例外是:
- System.NullReferenceException occurred
- Message=Object reference not set to an instance of an object.
- Source= <assembly/namespace>
- StackTrace:
- at <assembly/namespace>.<Class>.System.Windows.Markup.IStyleConnector.Connect(Int32 connectionId,Object target) in <XamlFilePath>:line 291
- InnerException:
编辑2:
方法处理程序是:
- private void Column_GotFocus(object sender,RoutedEventArgs e)
- {
- ContentPresenter columnContentPresenter =(DependencyObject)sender).FindParent<ContentPresenter>();
- Column column = (Column)columnContentPresenter.Content;
- string message = string.Format("{0} ({1})",column.Name,column.Field);
- ModuleDescriptor.UpdateStatusBar(message);
- }