XAML kann nicht kompiliert werden, aber es wird keine Fehlermeldung angezeigt, wenn das benutzerdefinierte Objekt die erste Ressource und unmittelbar danach x: Array resource @ is

Ich finde dieses Problem sehr seltsam, möglicherweise ein XAML / Visual Studio-Fehler. Ich hoffe, dass jemand anderes es weniger seltsam findet und eine Erklärung dafür hat, warum meine Handlungen falsch sind und / oder eine bessere Lösung, als die Ressourcen einfach in einer anderen Reihenfolge zu deklarieren.

Ich habe diese einfache 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>

Wenn ich versuche, das Projekt zu kompilieren, wird folgende Fehlermeldung angezeigt:

1> ... MainWindow.xaml.cs (25,13,25,32): Fehler CS0103: Der Name 'InitializeComponent' ist im aktuellen Kontext nicht vorhanden.

Ich verstehe die Bedeutung des Fehlers, aber nicht, warum es passiert. Die XAML scheint in Ordnung zu sein, es gibt keine Fehler beim Kompilieren, aber aus irgendeinem Grund die automatisch generierte .g.i.cs-Datei, in derInitializeComponent() wird normalerweise nicht erstellt oder verwendet (d. h. selbst wenn die Datei aus einer vorherigen erfolgreichen Kompilierung stammt, wird sie immer noch nicht in die Assembly kompiliert).

Wenn ich einfach die Reihenfolge der Ressourcen umdrehe, funktioniert es einwandfrei:

  <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>

Zusätzliche Information

A ist eine Klasse in meinem Projekt. Für die Zwecke dieses Tests wurde es als @ deklarierclass A { }, d. h. eine leere Klasse, aber ich bin zuerst auf dieses Problem gestoßen, indem ich Konverterinstanzen in die Ressourcen gestellt habe.Wenn ich einen eingebauten Typ anstelle von @ verwenA, z.B.<system:String x:Key="a1">Some string</system:String>, der Fehler tritt nicht auf.Wenn ich ein Objekt eines integrierten Typs als Ressource zwischen den benutzerdefinierten Typ platziereA Objekt und mein Array-Ressourcenobjekt, es funktioniert auch gut!

Mit anderen Worten, es scheint, als ob ein oder mehrere benutzerdefinierte typisierte Objekte als erste Ressourcenelemente, gefolgt von einem Array-Objekt, das Kompilieren fehlschlagen lassen. Andere Kombinationen scheinen gut zu funktionieren.


Kann jemand erklären, warum dies das erwartete Verhalten ist (und was ich tun sollte, um es zu vermeiden, abgesehen davon, dass ich nur meine Ressourcen neu anordnete), oder bestätigen, dass ich nicht ganz verrückt in der Annahme bin, dass dies ein Fehler im XAML-Build-Prozess ist?


Bearbeiten

Da dies wahrscheinlich ein tatsächlicher Fehler ist, habe ich hier einen Connect-Fehlerbericht geöffnet:https: //connect.microsoft.com/VisualStudio/feedback/details/1441123/xaml-fails-to-compile-without-error-if-user-defined-object-is-first-resource-and-followed-immediate -by-x-Array-Ressource

Siehe auch verwandte / ähnliche Stack Overflow Frage:Der Name 'InitializeComponent' existiert im aktuellen Kontext nicht: seltsames Verhalten


Edit # 2:

Das WPF hat den Connect-Bericht aktualisiert (siehe Link oben) und erklärt, dass die Fehlerbehebung in der nächsten Version von .NET veröffentlicht wird:

Veröffentlicht von Sachin [MSFT] am 09.03.2016 um 15:53 Uhr

Das WPF-Team hat dieses Problem überprüft und in der nächsten Version von .NET behoben. Wir bedanken uns für das Feedback und betrachten dieses Problem als gelöst - WPF Team

Antworten auf die Frage(0)

Ihre Antwort auf die Frage