Ich verwende WPF mit dem Model-View-ViewModel-Muster. Daher sind meine Code-hinter-Dateien (.xaml.cs) alle leer, außer für den Konstruktor mit einem Aufruf von InitializeComponent. Daher habe ich für jede .xaml-Datei eine passende, unbrauchbare .xaml.cs-Datei.XAML ohne den Code .xaml.cs hinter Dateien
Ich schwöre ich irgendwo gelesen, dass, wenn der Code hinter der Datei leer ist, mit Ausnahme des Konstruktors, gibt es eine Möglichkeit, die Datei aus dem Projekt insgesamt zu löschen. Nach der Suche im Netz, so scheint es, dass der geeignete Weg, dies zu tun, ist das ‚x: Subclass‘ verwenden Attribut:
<UserControl
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"
mc:Ignorable="d"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
x:Class="MyNamespace.MyClass"
x:Subclass="UserControl"
d:DesignWidth="700" d:DesignHeight="500">
Dies führt folgende Aktionen in der generierten .g.cs Datei:
- Entfernt den partiellen Klassenmodifikator in MyClass.
- Fügt der Unterklassenliste die Klasse 'UserControl' hinzu.
Scheint perfekt. In der Tat, wenn Sie die .xaml.cs-Datei im Build noch haben, kompiliert es nicht mehr wegen des fehlenden Partials - also denke ich, dass das korrekt sein muss. Wenn ich jedoch die überflüssige Datei aus dem Build entfernen und ausführen, wird das Steuerelement nicht korrekt initialisiert (es ist leer). Dies ist vermutlich, weil InitializeComponent() nicht aufgerufen wird. Ich sehe, dass InitializeComponent nicht virtuell ist, daher scheint es, dass es für die Basisklasse keine Möglichkeit gibt, sie aufzurufen (ohne Reflektion zu verwenden).
Fehle ich etwas?
Danke!
Eric
Danke Scott. Dies ist definitiv ein besserer Ansatz. – Eric
+1 Ich benutze auch diesen Weg. Es funktioniert so großartig, es ist fast wie Magie. –
Hinweis: ist in WPF verfügbar, aber nicht in Silverlight. –
MrSharps