无效操作异常:此可冻结对象无法冻结
本文关键字:冻结 对象 操作 异常 无效 | 更新日期: 2023-09-27 18:34:31
我正在努力为具有多个窗口的WPF应用程序实现全局快捷键(即应用程序范围的快捷键(。为了实现这一目标,我正在做:
CommandManager.RegisterClassInputBinding(typeof(Window), o); // o is just a keybinding
也就是说,我正在尝试向 Window 类注册键绑定,以便我的快捷键工作,无论哪个窗口处于活动状态。但是我的代码在到达此行时会引发以下异常:
System.InvalidOperationException 未由用户代码处理
消息=此可冻结对象无法冻结。
Source=WindowsBase
堆栈跟踪:
at System.Windows.Freezable.Freeze()
at System.Windows.Input.CommandManager.RegisterClassInputBinding(Type type, InputBinding inputBinding)
以下是键绑定o
的创建方式:
KeyBinding o = new KeyBinding()
{
Command = f,
CommandParameter = popup,
Key = Key.Q,
Modifiers = ModifierKeys.Control
};
popup
只是一个 WPF 弹出窗口。 f
是实现ICommand
接口的类的对象。
我在StackOverflow上查找过类似的问题,它们似乎是由可冻结的对象SolidColorBursh引起的。我认为这不适用于我的情况。有谁知道发生了什么?
我今天遇到了这个问题并发现了这个问题。如果满足以下任一条件,则无法冻结可冻结对象(来自下面链接的文档(:
- 它具有动画或数据绑定属性。
- 它具有由动态资源设置的属性。
- 它包含无法冻结的可冻结子对象。
我读到的方式基本上是,如果你绑定到对象的任何属性(在你的例子中是窗口(,或者如果它的任何子属性(或子属性等(有任何数据绑定,它不能被冻结,这使得许多操作变得不可能。
就我而言,我尝试使用EventTrigger在另一个对象的属性上设置值。我将该属性绑定到我的视图模型,因此由于上述原因它失败了。(我试图从视图中偷偷删除一些数据,而没有通过创建附加的 DependencyProperty 来更恰当地做事,这是我最终结束做的事情(。
有关此内容Microsoft文档如下:https://learn.microsoft.com/en-us/dotnet/desktop/wpf/advanced/freezable-objects-overview