2

Ich habe eine Reihe von UserControls, die ein paar ähnliche Eigenschaften haben müssen. Daher habe ich eine abstrakte Unterklasse von UserControl definiert, die diese Eigenschaften definiert und die Dateien .xaml.cs und .g.cs aktualisiert, die von dieser Basisklasse erben sollen. Alles kompiliert gut und läuft gut. Groß! Aber .... .g.cs Dateien werden generiert und werden neu generiert. Wie kann ich Blend oder Visual Studio mitteilen, dass sie von meiner Basisklasse anstelle von UserControl vererbt werden?Vererbung von einer UserControl abstrakten Unterklasse

Antwort

6

Sie müssen den XAML ein wenig ändern, um die Usercontrol-Deklaration mit einem Namespace Präfix:

<local:MyBaseControl x:Class="MyNameSpace.MyControl" 
    xmlns:local="clr-namespace:MyNameSpace" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <!-- Content --> 
</local:MyBaseControl> 

Wo MyNameSpace ist Ihr Namensraum (! DUH), MyBaseControl Ihre Basisklasse und MyControl ist Ihre Kontrolle, die erbt von MyBaseControl. Der x: Class-Teil muss nicht im selben Namespace sein, ich habe ihn einfach für das Beispiel beibehalten.

Weitere Informationen here und here.

+0

Eine weitere Frage, obwohl, während dies kompiliert, gibt mir Expression Blend jetzt eine 'Ausnahme: kann keine Instanz von "MyBaseControl" erstellen. Gibt es einen Weg dies zu tun und trotzdem Blend benutzen zu können? –

+0

Steve: Es gibt einen Tippfehler in Ihrem Code, wenn Sie das lokale Tag schließen. Ich muss noch keine Befugnisse zum Bearbeiten haben. –

+0

Ein Hinweis auf ein Problem, das ich festgestellt habe: Wenn der Compiler sagt, dass das Tag nicht in Ihrem local: -Namespace gefunden werden kann, liegt das möglicherweise daran, dass die Assembly, die den lokalen Namespace enthält, nicht erstellt wird. –