17

我有一个奇怪的错误,我试图调试但没有运气。

我有子类 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'.

奇怪的是它发生在窗口关闭后大约 1500 毫秒。我尝试将 FocusVisualStyle 设置fs为 null,但它看起来像别的东西。直觉是它试图在我的应用程序中关注另一个没有此属性的元素,但我真的不知道!

谢谢!

编辑。问题是我的全屏按钮上 FocusVisualStyle 的自定义设置。我设置为 {x:Null} 并且问题消失了。

4

4 回答 4

27

当 Style 指向不存在StaticResource的 a 时,可能会发生这种情况。

此 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}”不是属性“Height”的有效值。

当我添加缺失StaticResource的 时,问题就消失了。

于 2018-12-12T23:53:05.360 回答
13

我的猜测是,当您关闭上述窗口时获得焦点的控件具有您设置的自定义样式,其中不包含任何 FocusVisualStyle。

所以为了进一步帮助你,你应该多解释一下:当你关闭这个窗口时会发生什么(或应该发生)?

什么控制类型应该获得焦点?

于 2011-02-23T10:11:38.230 回答
8

导致上述异常的另一种方法是在使用它后声明 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>
于 2020-03-11T14:03:40.393 回答
4

如果您通过谷歌搜索问题标题到这里:导致此异常的另一种方法是使用 a Trigger,但忘记设置Value.

例子:

<ControlTemplate.Triggers>
  <Trigger Property="IsEnabled">
    <Setter Property="Background" Value="Gray" />
  </Trigger>
</ControlTemplate.Triggers>

这会导致内部异常读取的 XamlParseException:

“{DependencyProperty.UnsetValue}”不是属性“IsEnabled”的有效值。

更正:

<ControlTemplate.Triggers>
  <Trigger Property="IsEnabled" Value="False">
    <Setter Property="Background" Value="Gray" />
  </Trigger>
</ControlTemplate.Triggers>
于 2020-01-09T13:51:15.917 回答