gpt4 book ai didi

wpf - 在EditingTemplateCell中使用弹出窗口:Message = Value不能为null。参数名称:后代

转载 作者:行者123 更新时间:2023-12-01 22:51:29 37 4
gpt4 key购买 nike

我正在使用WPF DataGrid,并放置了DataGridTemplateColumn。因为该列应该对复杂类型(这是一个对象)执行编辑,所以我决定放置一个打开弹出窗口的切换按钮。代码如下:

                <DataTemplate>
<Grid>
<ToggleButton Grid.Column="2" x:Name="tb" Focusable="false" IsChecked="False" ClickMode="Press" Content="Edit values" />
<Popup IsOpen="{Binding ElementName=tb, Path=IsChecked, Mode=OneWay}" Placement="Bottom" x:Name="Popup" Focusable="False" StaysOpen="False" AllowsTransparency="True" Margin="0,1,0,0">
<Grid x:Name="dd" SnapsToDevicePixels="True">
<Border x:Name="ddb" Margin="0,-1,0,0" BorderBrush="DarkGray" BorderThickness="1" CornerRadius="0,0,3,3" Background="Gray">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="Uno:" Grid.Row="0" Grid.Column="0" />
<TextBox Text="{Binding Path=calendar.uno, Mode=TwoWay, StringFormat={}{0:0.##}}" Grid.Row="0" Grid.Column="1" />
<TextBlock Text="Due:" Grid.Row="1" Grid.Column="0" />
<TextBox Text="{Binding Path=calendar.due, Mode=TwoWay, StringFormat={}{0:0.##}}" Grid.Row="1" Grid.Column="1" />
<TextBlock Text="Tre:" Grid.Row="2" Grid.Column="0" />
<TextBox Text="{Binding Path=calendar.tre, Mode=TwoWay, StringFormat={}{0:0.##}}" Grid.Row="2" Grid.Column="1" />
</Grid>
</Border>
</Grid>
</Popup>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

弹出窗口有效,但是经常发生以下异常:

System.ArgumentNullException未处理
Message = Value不能为null。
参数名称:后代
来源= PresentationCore
ParamName =后代
堆栈跟踪:
在System.Windows.Media.VisualTreeHelper.IsAncestorOf(DependencyObject祖先,DependencyObject子孙,键入stopType)
在System.Windows.Controls.DataGridCell.RemoveBindingExpressions(BindingGroup bindingGroup,DependencyObject元素)
在System.Windows.Controls.DataGridCell.BuildVisualTree()
在System.Windows.Controls.DataGridCell.OnIsEditingChanged(Boolean isEditing)
在System.Windows.Controls.DataGridCell.OnIsEditingChanged(对象发送者,DependencyPropertyChangedEventArgs e)
在System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
在System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
在System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
在System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex,DependencyProperty dp,PropertyMetadata元数据,EffectiveValueEntry oldEntry,EffectiveValueEntry&newEntry,布尔值coerceWithDeferredReference,布尔值coerceWithCurrentValue,OperationType操作类型)处
在System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp,对象值,PropertyMetadata元数据,布尔coerceWithDeferredReference,布尔coerceWithCurrentValue,OperationType operationType,布尔isInternal)
在System.Windows.DependencyObject.SetValue(DependencyProperty dp,布尔值)
在System.Windows.Controls.DataGridCell.BeginEdit(RoutedEventArgs e)
在System.Windows.Controls.DataGrid.OnExecutedBeginEdit(ExecutedRoutedEventArgs e)
在System.Windows.Controls.DataGrid.OnExecutedBeginEdit(对象发送者,ExecutedRoutedEventArgs e)
在System.Windows.Input.CommandBinding.OnExecuted(对象发送者,ExecutedRoutedEventArgs e)
在System.Windows.Input.CommandManager.ExecuteCommandBinding(对象发送者,ExecutedRoutedEventArgs e,CommandBinding commandBinding)
在System.Windows.Input.CommandManager.FindCommandBinding(CommandBindingCollection命令绑定(bind),对象发送者,RoutedEventArgs e,ICommand命令,布尔执行)
在System.Windows.Input.CommandManager.FindCommandBinding(对象发送者,RoutedEventArgs e,ICommand命令,布尔执行)
在System.Windows.Input.CommandManager.OnExecuted(对象发送者,ExecutedRoutedEventArgs e)
在System.Windows.UIElement.OnExecutedThunk(对象发送者,ExecutedRoutedEventArgs e)
在System.Windows.Input.ExecutedRoutedEventArgs.InvokeEventHandler(Delegate genericHandler,Object target)
在System.Windows.RoutedEventArgs.InvokeHandler(委托(delegate)处理程序,对象目标)处
在System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventArgs routedEventArgs)
在System.Windows.EventRoute.InvokeHandlersImpl(对象源,RoutedEventArgs参数,布尔重新引发)
在System.Windows.UIElement.RaiseEventImpl(DependencyObject sender,RoutedEventArgs args)
在System.Windows.UIElement.RaiseEvent(RoutedEventArgs args,布尔值可信任)
在System.Windows.Input.RoutedCommand.ExecuteImpl(Object参数,IInputElement目标,布尔userInitiated)
在System.Windows.Input.RoutedCommand.Execute(Object参数,IInputElement目标)
在System.Windows.Controls.DataGrid.BeginEdit(RoutedEventArgs editingEventArgs)
在System.Windows.Controls.DataGridCell.OnAnyMouseLeftButtonDown(MouseButtonEventArgs e)
在System.Windows.Controls.DataGridCell.OnAnyMouseLeftButtonDownThunk(对象发送者,MouseButtonEventArgs e)
在System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler,Object genericTarget)
在System.Windows.RoutedEventArgs.InvokeHandler(委托(delegate)处理程序,对象目标)处
在System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventArgs routedEventArgs)
在System.Windows.EventRoute.InvokeHandlersImpl(对象源,RoutedEventArgs参数,布尔重新引发)
在System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender,RoutedEventArgs args,RoutedEvent newEvent)
在System.Windows.UIElement.OnMouseDownThunk(对象发送者,MouseButtonEventArgs e)
在System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler,Object genericTarget)
在System.Windows.RoutedEventArgs.InvokeHandler(委托(delegate)处理程序,对象目标)处
在System.Windows.RoutedEventHandlerInfo.InvokeHandler(对象目标,RoutedEventArgs routedEventArgs)
在System.Windows.EventRoute.InvokeHandlersImpl(对象源,RoutedEventArgs参数,布尔重新引发)
在System.Windows.UIElement.RaiseEventImpl(DependencyObject sender,RoutedEventArgs args)
在System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
在System.Windows.UIElement.RaiseEvent(RoutedEventArgs args,布尔值可信任)
在System.Windows.Input.InputManager.ProcessStagingArea()
在System.Windows.Input.InputManager.ProcessInput(InputEventArgs输入)
在System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
在System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd,InputMode模式,Int32时间戳,RawMouseActions操作,Int32 x,Int32 y,Int32滚轮处)处
在System.Windows.Interop.HwndMouseInputProvider.FilterMessage处(IntPtr hwnd,WindowMessage msg,IntPtr wParam,IntPtr lParam,布尔值和已处理)
在System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,布尔值和已处理)
在MS.Win32.HwndWrapper.WndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam,布尔值和已处理)
在MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托(delegate)回调,对象args,Int32 numArgs)
在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(对象源,委托(delegate)方法,对象args,Int32 numArgs,委托(delegate)catchHandler)
在System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority优先级,TimeSpan超时,委托(delegate)方法,对象args,Int32 numArgs)
在MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd,Int32 msg,IntPtr wParam,IntPtr lParam)
在MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG&msg)
在System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame框架)
在System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame框架)
在System.Windows.Threading.Dispatcher.Run()
在System.Windows.Application.RunDispatcher(对象忽略)
在System.Windows.Application.RunInternal(窗口窗口)
在System.Windows.Application.Run(窗口窗口)
在System.Windows.Application.Run()
在C:\ Users \ r.sarati \ Desktop \ WpfDataGridSynchronized_V1.00 \ WpfDataGridSynchronized \ CF40 \ WpfApplication5 \ obj \ Debug \ App.g.cs:line 50中的WpfApplication5.App.Main()
在System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String []参数)
在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args)中
在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
在System.Threading.ExecutionContext.Run(ExecutionContext执行上下文,ContextCallback回调,对象状态,布尔ignoreSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext执行上下文,ContextCallback回调,对象状态)
在System.Threading.ThreadHelper.ThreadStart()

有什么问题? (使用多列不是有效的替代方法)

最佳答案

目前我的应用程式中也有这个例外;相同的堆栈跟踪。我也找到了一些解决方案,但是这些解决方案不是很“不错”:

1 我在整个对话框中使用了Aero样式,在该对话框中,DataGrid在不同Windows版本中对默认控件具有相同的外观(主要是对于XP,其控件看起来更“尼特”)。当我在对话框xaml中注释以下代码部分时,没有其他异常显示:

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
</ResourceDictionary.MergedDictionaries>

但是我现在在XP上,我必须检查Win7上是否也解决了此问题。
编辑:也适用于Windows7。

2 尝试在Microsoft页面上检查此链接: http://support.microsoft.com/kb/2498911

3 正如在Microsoft页面上所写的那样,您仍然可以关闭数据网格的行或列的虚拟化,但是如果您有1000行,则需要花费一些时间来加载所有内容:/

编辑:

4. 我下载了Aero.NormalColor.xaml(来自Microsoft的部分主题,可在此处找到: http://msdn.microsoft.com/en-us/library/aa970773.aspx),并将此主题添加到我的app.xaml到应用程序词典中。看来这解决了问题(此主题的外观可能相同,但代码有所不同)。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/GlassButton.xaml"/>
<ResourceDictionary Source="Themes/Aero.NormalColor.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

关于wpf - 在EditingTemplateCell中使用弹出窗口:Message = Value不能为null。参数名称:后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770849/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com