Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# InvalidOperationException:无法冻结此freezable_C#_Wpf - Fatal编程技术网

C# InvalidOperationException:无法冻结此freezable

C# InvalidOperationException:无法冻结此freezable,c#,wpf,C#,Wpf,我正在为有多个窗口的WPF应用程序实现全局快捷键(即应用程序范围的快捷键)。为了实现这一目标,我正在做: CommandManager.RegisterClassInputBinding(typeof(Window), o); // o is just a keybinding 也就是说,我正在尝试向Window类注册一个keybinding,这样无论哪个窗口处于活动状态,我的快捷键都可以工作。但我的代码在到达此行时引发以下异常: 用户代码未处理System.InvalidOperationE

我正在为有多个窗口的WPF应用程序实现全局快捷键(即应用程序范围的快捷键)。为了实现这一目标,我正在做:

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引起的。我认为这不适用于我的情况。有人知道发生了什么吗?

我今天遇到了这个问题,找到了问题所在。如果以下任何一项为真(来自下面链接的文档),则无法冻结可冻结对象:

  • 它具有动画或数据绑定属性
  • 它具有由动态资源设置的属性
  • 它包含无法冻结的可冻结子对象
我的理解基本上是,如果您绑定到对象的任何属性(在您的例子中是窗口)或者它的任何子属性(或子属性,等等)有任何数据绑定,它就不能被冻结,这使得许多操作无法进行

在我的例子中,我试图使用EventTrigger设置另一个对象的属性值。我将该属性绑定到我的视图模型,因此由于上述原因,它失败了。(我试图通过创建一个附加的DependencyProperty将一些数据从视图中隐藏出来,但没有做更恰当的事情,这就是我最终要做的事情)


Microsoft文档如下所示:

该异常的堆栈跟踪是什么,这是否为您提供了有关冻结尝试内容的线索?您能否发布
o
是如何创建的代码
InputBinding
继承自
Freezeable
(),由于您的异常将我们包含在其中,我怀疑这就是问题所在。如果没有。对于这个问题,没有相关或有用的答案。请参阅duplicate,以获得一个答案,该答案描述了当明显的限制似乎不适用时,如何调试此异常。跟踪输出将澄清事实上违反了什么限制。