【问题标题】:Visual Studio XAML Designer error XDG0062 using EventSetter in .NET Core WPF applicationVisual Studio XAML 设计器错误 XDG0062 在 .NET Core WPF 应用程序中使用 EventSetter
【发布时间】:2019-11-26 13:59:01
【问题描述】:

在将 WPF 项目从 .NET Framework 移植到 .NET Core 时,我在 VS2019 v16.3.10 中遇到了 XAML-Designer 的问题。当我尝试在样式中使用EventSetter 时,它不断抛出XDG0062 错误。代码编译并运行良好,但错误导致设计器中的相关元素被替换为带有 X 的红色圆圈,使得 UI 设计相当困难。同样的 XAML 在 .NET framework 4.7.2. 项目中也能正常工作。

为了追查问题,我从头开始制作了一个 VS 最小项目(WPF .NET Core),问题也出现在这里(请参阅下面的错误和代码)。这似乎是由在样式中使用 EventSetter 引起的 - 不幸的是我不知道为什么。谷歌在没有解决方案的情况下提到了这个问题,堆栈溢出有一个关于这个错误代码的主题,但是,那里建议的解决方案(删除 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 报告你的问题。
  • 谢谢。我听从了您的建议并报告了它,该问题将得到解决:此问题的修复已在内部实施并正在准备发布我会在它发布时更新。
  • @BBokisch 你有这个问题的链接吗?在 VS16.8.5 中仍然存在
  • stackoverflow.com/questions/52606565/… 这个主题中的解决方案对我有用。

标签: wpf visual-studio xaml designer eventsetter


【解决方案1】:

我通过删除文件夹.vs/$(SolutionName)/DesignTimeBuild解决了这个问题,所以我可以保留VS配置/资源管理器/选项卡,删除整个.vs时会丢失。

【讨论】:

  • 不明白为什么,但它对我有用。
  • @surpavan 因为设计版本在某种程度上已损坏,需要更新。这迫使我们进行全新的设计构建。
  • 不适用于VS 2022 17.0 Preview 4.1
  • 尝试在删除之前关闭和打开 VS,因为它似乎无论如何都会重置设计表面。这对我在 VS2022 .Net 6 上的一个不同但相似的 xaml (XDG0045) 错误有效。
  • 干得好,你救了我的命,伙计!
【解决方案2】:

Microsoft 已经发布了 cmets 中提到的修复程序。我可以确认我的问题在 VS 2019 16.5.0 时确实得到了解决

【讨论】:

  • 我有 VS 2019 16.6.1,但仍然出现此错误。但我有社区版。也许他们修复了企业版或专业版。
  • 我刚从 16.6.2 开始遇到这个问题。我以前没有遇到过这个问题。我正在使用 VS Professional。
  • 可以确认我的原始问题在 16.6.2(社区)中仍然得到修复。
  • 我有 16.6.5 社区,我在 DataTemplate > DataTrigger 元素中看到了这个错误。我还使用“加号”(+) 语法来引用枚举,所以也许这与它有关。 &lt;DataTrigger Value="{x:Static abc:MyClass+MyEnumType.Value}" ...&gt;
  • 使用 16.7.0 - 有时仍会出现此错误消息。这是有效的 XAML 代码:&lt;Setter Property="BorderBrush" Value="{telerik1:FluentResource ResourceKey={x:Static telerik1:FluentResourceKey.BasicBrush}}"/&gt;,它会生成错误消息。如果我取出“{x:Static...}”部分,消息就会消失:&lt;Setter Property="BorderBrush" Value="{telerik1:FluentResource ResourceKey=BasicBrush}"/&gt; 总的来说,我不得不说 VS2019 中的 XAML 编辑器是微软的一款错误最多的软件
猜你喜欢
  • 2016-05-08
  • 2019-02-26
  • 2021-09-07
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 2016-10-04
相关资源
最近更新 更多