'{DependencyProperty.UnsetValue}'不是属性'FocusVisualStyle'的有效值

Dav*_*veO 9 wpf dependency-properties hwndhost

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

我有子类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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这在我的原型WPF应用程序中运行良好但是当我在我的主应用程序中使用此代码时,在关闭窗口(转义键)和fs.close()通话时出现此错误:

'{DependencyProperty.UnsetValue}' is not a valid value for property 'FocusVisualStyle'.

奇怪的是它在窗户关闭后大约1500ms发生.我已经尝试将FocusVisualStyle设置fs为null,但它看起来像是其他东西.直觉是它试图将另一个元素集中在我没有这个属性的app中,但我真的不知道!

谢谢!

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

Mel*_*per 9

当样式指向一个可能出现这种情况StaticResource不存在的

这个xaml失败了:

<Grid.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Height" Value="{StaticResource StandardControlHeight}"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>
</Grid.Resources>
Run Code Online (Sandbox Code Playgroud)

错误是:

System.InvalidOperationException:“ {DependencyProperty.UnsetValue}”不是属性“ Height”的有效值。

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


Dav*_*vid 7

我的猜测是,当您关闭所提到的窗口时获得焦点的控件具有由您设置的不包含任何FocusVisualStyle的自定义样式.

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

什么控制类型应该得到关注?

  • 对于读者:我得到了错误,因为在一个地方,我没有合并定义我的实际焦点样式的ResourceDictionary.XAML设计师没有抱怨StaticResource引用.在运行时以特定方式更改键盘焦点之前,我没有收到任何错误. (4认同)

小智 6

导致上述异常的另一种方法是在使用 StaticResource 后声明它,例如在样式声明中。

错误的

<Style TargetType="Label">
    <Setter Property="Foreground" Value="{StaticResource BlueAccent}"/>
</Style>

<SolidColorBrush x:Key="BlueAccent" Color="#22afed"/>
Run Code Online (Sandbox Code Playgroud)

正确的

<SolidColorBrush x:Key="BlueAccent" Color="#22afed"/>

<Style TargetType="Label">
    <Setter Property="Foreground" Value="{StaticResource BlueAccent}"/>
</Style>
Run Code Online (Sandbox Code Playgroud)