我有一个奇怪的错误,我试图调试没有运气。
我已经子类化了hwndhost显示一些内容,我在那个类中有下面的函数来设置为全屏:
private void SetFullScreen(bool enable)
{
if (enable)
{
fs = new Window();
fs.ResizeMode = ResizeMode.NoResize;
fs.WindowState = System.Windows.WindowState.Maximized;
fs.WindowStyle = System.Windows.WindowStyle.None;
fs.Topmost = true;
fs.PreviewKeyDown += delegate(object sender, KeyEventArgs e) {
if (e.Key==Key.Escape)
FullScreen = false;
};
fs.Show();
}
else
{
fs.Close();
fs = null;
}
}
这在我的原型WPF应用程序中运行良好,但当我在主应用程序中使用此代码时,在关闭窗口(escape键)和fs.close()
调用时出现此错误:'{DependencyProperty.UnsetValue}' is not a valid value for property 'FocusVisualStyle'.
奇怪的是,它发生在窗口关闭后大约1500 ms。我试过将fs
上的FocusVisualStyle设置为null,但它看起来像是其他东西。直觉是,它试图聚焦我的应用程序中没有此属性的另一个元素,但我真的不知道!
谢谢你!
编辑。问题是全屏按钮上FocusVisualStyle的自定义设置。我设置为{x:Null},问题就消失了。
5条答案
按热度按时间gpfsuwkq1#
当样式指向不存在的
StaticResource
时,可能会发生这种情况。此xaml失败:
错误为:
系统操作无效异常:“{DependencyProperty.UnsetValue}”不是属性“Height "的有效值。
当我添加缺少的
StaticResource
时,问题就消失了。dy1byipe2#
我的猜测是,当您关闭上述窗口时获得焦点的控件具有您设置的自定义样式,该样式不包括任何FocusVisualStyle。
因此,为了进一步帮助您,您应该再多解释一些:关闭此窗口时会发生(或应该发生)什么?
什么控件类型应该获得焦点?
mzmfm0qo3#
另一种导致上述异常的方法是在使用StaticResource之后声明它,例如在样式声明中。
错了
正确
0h4hbjxa4#
如果你在这里通过谷歌搜索问题标题:导致此异常的另一种方法是使用
Trigger
,但忘记设置Value
。示例:
这将导致XamlParseException,其中内部异常为:
'{DependencyProperty.UnsetValue}'不是属性'IsEnabled'的有效值。
更正:
06odsfpq5#
另一种情况是声明了
StaticResource
,但在提及时未看到。例如,在我的案例中:
'{DependencyProperty.UnsetValue}'不是属性'Background'的有效值。
在
App.xaml.cs
文件中的OnStartup
方法处、应用程序启动之前发生。异常消息提到了
Background
属性,它说明:在一些
或
WPF开始在层次结构中查找xxx,如果出现类似
则将发生异常。
在我的情况下,我已经把我的风格在一个单独的项目,它是这样的:
我以为
ToggleButtonStyles.xaml
中的样式会看到xxx,因为声明的顺序(ButtonStyles.xaml
在上面,将在ToggleButtonStyles.xaml
之前合并),结果是错误的!解决方案1.
将
StaticResource
替换为DynamicResource
这样,如果在启动时没有找到xxx,WPF将不会引发异常,但它将在以后按预期使用它。
解决方案2.
将所有颜色提取到一个单独的ResrouceDictionary中,并将其合并到App.xaml中SharedResources.xaml之前