在我的工作地点,我们最近将我们的代码库从.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);
}
答案 0 :(得分:10)
这是一个框架错误,它已经修复,请下载热修复程序以解决问题!!
http://support.microsoft.com/kb/2464222
错误报告在这里:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/629bfcc5-2005-4947-a001-993524798b52
在此处下载文件
答案 1 :(得分:6)
我认为问题是你正在尝试在样式设置器中添加事件处理程序。 这是禁止的(出于不明原因)...... 您应该使用EventSetters
例如:
<Style x:Key="YourSyleName" TargetType="{x:Type CtrlType}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="dgClient_PreviewMouseLeftButtonDown"/>
<EventSetter Event="Loaded" Handler="GridContent_Loaded"/>
</Style>