我有一个奇怪的错误,我试图调试没有运气。
我已经将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应用程序中运行良好但是当我在我的主应用程序中使用此代码时,在关闭窗口(转义键)和fs.close()
调用时出现此错误:
'{DependencyProperty.UnsetValue}' is not a valid value for property 'FocusVisualStyle'.
奇怪的是它在窗户关闭后大约1500ms发生。我已经尝试将fs
上的FocusVisualStyle设置为null,但它看起来像是其他东西。直觉是它试图将另一个元素集中在我没有这个属性的应用程序中,但我真的不知道!
谢谢!
编辑。问题是我的全屏按钮上的自定义设置FocusVisualStyle。我设置为{x:Null},问题就消失了。
答案 0 :(得分:7)
我的猜测是,关闭所提到的窗口时获得焦点的控件有一个由你设置的自定义样式,不包含任何FocusVisualStyle。
为了进一步帮助你,你应该多解释一下:当你关闭这个窗口时会发生什么(或者应该发生什么)?
什么控制类型应该得到关注?
答案 1 :(得分:5)
引起异常的另一种方法是在使用StaticResource后声明它,例如在样式声明中。
错误
<Style TargetType="Label">
<Setter Property="Foreground" Value="{StaticResource BlueAccent}"/>
</Style>
<SolidColorBrush x:Key="BlueAccent" Color="#22afed"/>
正确
<SolidColorBrush x:Key="BlueAccent" Color="#22afed"/>
<Style TargetType="Label">
<Setter Property="Foreground" Value="{StaticResource BlueAccent}"/>
</Style>
答案 2 :(得分:4)
当样式指向不存在的StaticResource
时,就会发生这种情况。
此xaml失败:
<Grid.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Height" Value="{StaticResource StandardControlHeight}"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Grid.Resources>
错误是:
System.InvalidOperationException:''{DependencyProperty.UnsetValue}' 不是属性“高度”的有效值。
当我添加缺少的StaticResource
时,问题就消失了。
答案 3 :(得分:2)
如果您通过谷歌搜索问题标题到达这里:导致此异常的另一种方法是使用Trigger
,但是忘记设置Value
。
示例:
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled">
<Setter Property="Background" Value="Gray" />
</Trigger>
</ControlTemplate.Triggers>
这会导致XamlParseException,其中内部异常读取:
“ {DependencyProperty.UnsetValue}”不是属性的有效值 “已启用”。
更正:
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="Gray" />
</Trigger>
</ControlTemplate.Triggers>