InvalidOperationException:无法冻结此freezable

时间:2013-10-09 15:59:37

标签: c# wpf

我正在为我的WPF应用程序实现全局快捷键(即应用程序范围的快捷键),它有多个窗口。为此,我正在做

CommandManager.RegisterClassInputBinding(typeof(Window), o); // o is just a keybinding

也就是说,我正在尝试使用Window类注册一个键绑定,这样无论哪个窗口处于活动状态,我的快捷键都能正常工作。但是我的代码在到达这一行时引发了以下异常:

  

System.InvalidOperationException未被用户代码处理       消息=此Freezable无法冻结。       源= WindowsBase

我在StackOverflow上查找了类似的问题,它们似乎是由freezable对象SolidColorBursh引起的。我认为这不适用于我的情况。有谁知道发生了什么?

1 个答案:

答案 0 :(得分:0)

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

  • 它具有动画或数据绑定属性。
  • 它具有由动态资源设置的属性。
  • 它包含无法冻结的 Freezable 子对象。

我读到的方式基本上是,如果您绑定到任何对象的属性(在您的情况下为 Window),或者它的任何子属性(或子项的子属性等)具有任何数据绑定,它不能被冻结,这使得许多操作无法进行。

就我而言,我试图使用 EventTrigger 为另一个对象的属性设置值。我将该属性绑定到我的视图模型,因此由于上述原因而失败。 (我试图通过创建附加的 DependencyProperty 来将一些数据从视图中偷走,而没有做更合适的事情,这就是我最终完成的工作)。

有关此的 Microsoft 文档位于此处:https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/freezable-objects-overview