Classe base comune con XAML e WPF

di Cristian Civera, in WPF,

In questo periodo sto scrivendo una piccola applicazione WPF composta da una NavigationWindow e varie pagine di navigazione. Ogni pagina è rappresentata dalla classe Page che è l'elemento root di ogni file:

<Page x:Class="Pagina1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    ...
</Page>

Ho avuto la necessità però di avere una classe base, comune a tutte le pagine, che estenda la Page originale e per farlo, inizialmente mi sono intestardito a trovare un attributo che mi permettesse di specificare la classe dalla quale ereditare, un po' come in ASP.NET. Mi sono poi dato un botta in testa e pensato: che stupido!

Quando usiamo il tag Page indichiamo la classe sulla quale poi il generatore costruirà il codice e l'albero degli oggetti. Quindi basta utilizzare una nostra classe che il parser ci permette di utilizzare dichiarando un namespace xml custom.
Ho definito quindi la classe base nel mionamespace:

public class MyPage : Page {
...
}

Per poi utilizzarla nella pagina:

<c:MyPage x:Class="Pagina1" 
        xmlns:c="clr-namespace:mionamespace"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    ...
</c:MyPage>

Risultato: il codice autogenerato e il mio codefile ereditano da MyPage.
Occho all'attributo x:SubClass che ha un altro scopo. Se presente indica il nome della classe del codefile, mentre x:Class indica il nome della classe autogenerata. La prima erediterà così dalla seconda.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese