C# InvalidOperationException:无法冻结此freezable
我正在为有多个窗口的WPF应用程序实现全局快捷键(即应用程序范围的快捷键)。为了实现这一目标,我正在做:C# InvalidOperationException:无法冻结此freezable,c#,wpf,C#,Wpf,我正在为有多个窗口的WPF应用程序实现全局快捷键(即应用程序范围的快捷键)。为了实现这一目标,我正在做: CommandManager.RegisterClassInputBinding(typeof(Window), o); // o is just a keybinding 也就是说,我正在尝试向Window类注册一个keybinding,这样无论哪个窗口处于活动状态,我的快捷键都可以工作。但我的代码在到达此行时引发以下异常: 用户代码未处理System.InvalidOperationE
CommandManager.RegisterClassInputBinding(typeof(Window), o); // o is just a keybinding
也就是说,我正在尝试向Window类注册一个keybinding,这样无论哪个窗口处于活动状态,我的快捷键都可以工作。但我的代码在到达此行时引发以下异常:
用户代码未处理System.InvalidOperationException
Message=无法冻结此可冻结文件
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
};
弹出窗口
只是一个wpf弹出窗口f
是实现ICommand
接口的类的对象
我在StackOverflow上查找了类似的问题,它们似乎是由freezable对象SolidColorBursh引起的。我认为这不适用于我的情况。有人知道发生了什么吗?我今天遇到了这个问题,找到了问题所在。如果以下任何一项为真(来自下面链接的文档),则无法冻结可冻结对象:
- 它具有动画或数据绑定属性
- 它具有由动态资源设置的属性
- 它包含无法冻结的可冻结子对象
Microsoft文档如下所示:该异常的堆栈跟踪是什么,这是否为您提供了有关冻结尝试内容的线索?您能否发布
o
是如何创建的代码InputBinding
继承自Freezeable
(),由于您的异常将我们包含在其中,我怀疑这就是问题所在。如果没有。对于这个问题,没有相关或有用的答案。请参阅duplicate,以获得一个答案,该答案描述了当明显的限制似乎不适用时,如何调试此异常。跟踪输出将澄清事实上违反了什么限制。