c# – 迁移到.Net 4:在xaml中添加事件时抛出空引用异常
发布时间:2020-12-15 08:07:26 所属栏目:百科 来源:网络整理
导读:在我的工作地点,我们最近将我们的代码库从.Net 3.5升级到.Net 4(C#).遇到的大多数问题已经解决,但是这个我无法弄清楚.我们通过混合使用xaml和代码来初始化控件和页面(基于开发人员首选项),但是一个页面在打开时会抛出NullReferenceException.这是一段代码片
在我的工作地点,我们最近将我们的代码库从.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); } 解决方法
我认为问题是你正在尝试在样式设置器中添加事件处理程序.
这是禁止的(出于不明原因)…… 您应该使用EventSetters 例如: <Style x:Key="YourSyleName" TargetType="{x:Type CtrlType}"> <EventSetter Event="PreviewMouseLeftButtonDown" Handler="dgClient_PreviewMouseLeftButtonDown"/> <EventSetter Event="Loaded" Handler="GridContent_Loaded"/> </Style> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |