C# 如果用户定义的对象是第一个资源,紧随其后的是x:Array资源,则XAML无法编译,但没有任何错误消息

C# 如果用户定义的对象是第一个资源,紧随其后的是x:Array资源,则XAML无法编译,但没有任何错误消息,c#,wpf,xaml,compiler-errors,C#,Wpf,Xaml,Compiler Errors,我发现这个问题非常奇怪,可能是XAML/VisualStudio的错误。我希望其他人能发现它不那么奇怪,并能解释为什么我所做的是错误的,和/或更好的解决方法,而不仅仅是以不同的顺序声明资源 我有一个简单的XAML: <Window x:Class="TestSOAskArrayXaml.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="

我发现这个问题非常奇怪,可能是XAML/VisualStudio的错误。我希望其他人能发现它不那么奇怪,并能解释为什么我所做的是错误的,和/或更好的解决方法,而不仅仅是以不同的顺序声明资源

我有一个简单的XAML:

<Window x:Class="TestSOAskArrayXaml.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:TestSOAskArrayXaml"
        Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
    <local:A x:Key="a1"/>
    <x:Array x:Key="listBoxItems" Type="{x:Type system:Double}">
      <system:Double>0.25</system:Double>
    </x:Array>
  </Window.Resources>

  <Grid/>
</Window>
其他信息:

  • A
    是我项目中的任何类。在本测试中,它被声明为
    类A{}
    ,即空类,但我首先遇到了将转换器实例放入资源中的问题
  • 如果我使用内置类型而不是
    a
    ,例如
    Some string
    ,则不会发生错误
  • 如果我将内置类型的对象作为资源放置在用户定义类型
    a
    对象和数组资源对象之间,它也可以正常工作
换句话说,似乎有一个或多个用户定义的类型化对象作为第一个资源元素,紧跟着一个数组对象,会导致编译失败。其他组合似乎效果不错


有人能解释一下为什么这是预期的行为(除了重新安排我的资源之外,我应该做些什么来避免它),或者确认我没有完全疯狂地认为这是XAML构建过程中的一个bug吗


编辑:

考虑到这可能是一个实际的bug,我在这里打开了一个Connect bug报告:


另请参阅相关/类似的堆栈溢出问题:

WPF团队已更新了Connect报告(请参阅相关链接),声明将在下一版本的.NET中发布该错误的修复程序:

由Sachin[MSFT]于2016年3月9日下午3:53发布

WPF团队已经审查了这个问题,并在下一版本的.NET中修复了这个问题。我们感谢您的反馈,并考虑这个问题解决- WPF团队


不幸的是,Microsoft已停用Connect站点,因此实际报告不再可用。但是我在这个问题中提出的问题不应该再出现了。

这真的很有趣,以前也提出过类似的问题,典型的答案不适用于这个场景。也许唯一的选择是“不要那样做”,但这并不能真正解释原因。@KevinNacios:谢谢!我做了我认为是对细节的彻底搜索,但没有注意到这个问题(我想我错过了,因为它没有)。我同意这几乎是完全相同的情况,但一个答案似乎并没有解决这两个问题(为什么答案会被选上还不清楚……我想这一定帮助了遇到这个问题的其他人)。我在另一个问题上加了一条评论,希望如果有人最终提供了一个真正的答案,他们会顺便来这里写一条关于这个问题的说明。:)
  <Window.Resources>
    <x:Array x:Key="listBoxItems" Type="{x:Type system:Double}">
      <system:Double>0.25</system:Double>
    </x:Array>
    <local:A x:Key="a1"/>
  </Window.Resources>