在.NET Core WPF应用程序中使用EventSetter时,Visual Studio XAML Designer出现错误XDG0062。

16

在将一个WPF项目从.NET Framework迁移到.NET Core时,我在VS2019(v16.3.10)的XAML设计器中遇到了问题。当我尝试在样式中使用EventSetter时,它会持续抛出XDG0062错误。代码可以编译和运行,但是这些错误导致设计器中相关元素被一个带有X的红色圆圈替换,使得UI设计变得困难。相同的XAML在.NET Framework 4.7.2项目中工作正常。

为了追踪问题,我从头开始创建了一个VS minimal项目(WPF .NET Core),这个问题也在这里出现了(请参见下面的错误和代码)。看起来是由于在样式中使用EventSetter引起的——不幸的是,我不知道原因。谷歌只给出了一个没有解决方案的问题提及,Stack Overflow上有一个关于此错误代码的主题,然而,那里建议的解决方案(删除VS缓存)并没有帮助。删除EventSetter行可以同时移除两条错误信息。

有人有解决这个问题的建议吗?

完整的错误信息:

Line 9: XDG0062 Non-NULL value required for "EventSetter.Handler"

Line 12: XDG0062 Value cannot be null. (Parameter 'typeDescriptorContext')

XAML:

<Window x:Class="XDG0062_test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:XDG0062_test"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Height" Value="30"></Setter>
            <Setter Property="Width" Value="130"></Setter>
            <EventSetter Event="GotFocus" Handler="TextBox_GotFocus"/>
        </Style>
    </Window.Resources>
    <Grid>
        <TextBox HorizontalAlignment="Left" Margin="70,100,0,0"
                 Text="TextBox" TextWrapping="Wrap" VerticalAlignment="Top"/>
    </Grid>
</Window>

C#:

using System.Windows;
namespace XDG0062_test
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void TextBox_GotFocus(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Beep");
        }
    }
}

我可以重现这个错误信息,它可以构建和运行,但是 'Handler="TextBox_GotFocus"' 不起作用。我尝试找一些文档来分析这个问题。但是,不幸的是,我找不到一个适当的方法来解决这个错误信息。因此,我建议您去 Developer Community NET/Visual Studio 报告您的问题。 - Yohann
谢谢。我听从了您的建议并进行了报告,问题将会得到解决:该问题已经在内部得到修复,并正在准备发布。一旦发布,我会进行更新。 - BBockisch
@BBokisch,你有这个问题的链接吗?在VS16.8.5中仍然存在。 - RudolfJan
https://dev59.com/vuk5XIcBkEYKwwoY7ODv 该主题中的解决方案对我有效。 - RudolfJan
2个回答

16

我在 VS2019 中通过删除文件夹 .vs/$(SolutionName)/DesignTimeBuild 解决了这个问题,这样我就可以保留 Visual Studio 的配置、资源管理器和标签页,而不必删除整个 .vs 文件夹。

设计构建某种原因已经损坏需要更新。这会强制 Visual studio 进行全新的设计构建。


我不知道为什么,但它对我起作用了。 - surpavan
2
@surpavan 因为设计构建某种程度上已经损坏并需要更新。这迫使我们进行全新的设计构建。 - Soleil
3
无法在 VS 2022 17.0 Preview 4.1 上运行。 - Toni
在删除之前,尝试关闭并重新打开VS,因为它似乎可以重置设计表面。这对我在VS2022 .Net 6上的另一个但类似的xaml(XDG0045)错误起作用了。 - ΩmegaMan
没有在VS 2022 17.0.2专业版和.Net 4.8.04084上工作。这个错误在VS 2019下不会发生,但是会出现另一个信息较少的错误。但有时错误会消失,我们不知道为什么。 - Owen Godfrey

0

微软已经发布了在评论中提到的修复程序。我可以确认,自从使用VS 2019 16.5.0版本以来,我的问题确实已经得到了解决。


3
我有VS 2019 16.6.1版本,但仍然遇到这个错误。不过我使用的是社区版,可能这个问题只修复了企业版或专业版。 - Petr Havlát
可以确认,截至16.6.2(社区版),我的原始问题仍然已经解决。 - BBockisch
1
仍然会偶尔出现错误信息,使用16.7.0版本。以下是有效的XAML代码: <Setter Property="BorderBrush" Value="{telerik1:FluentResource ResourceKey={x:Static telerik1:FluentResourceKey.BasicBrush}}"/> 但这段代码会产生错误信息。如果我去掉"{x:Static...}"这部分,信息就消失了: <Setter Property="BorderBrush" Value="{telerik1:FluentResource ResourceKey=BasicBrush}"/> 总的来说,我不得不说VS2019中的XAML编辑器是微软最多错误的软件之一。 - okieh
即使在.NET Framework中没有问题,但在.NET 5中会出现错误,例如Window Style =“{StaticResource windowMain}”这样的简单内容。应用程序编译和运行都很好。在有人问之前,样式“windowMain”是针对“Window”的。VS Community 16.8.3。 - Daap
在使用 .Net 3.1 的 Visual Studio 16.8.5 中出现了这个错误信息,但代码运行正常,所以不知道问题出在哪里。 - RudolfJan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接