Domanda

Ho deciso che tutte le mie pagine WPF devono registrare un evento indirizzato.Piuttosto che includere

public static readonly RoutedEvent MyEvent= EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(BasePage));

su ogni pagina, ho deciso di creare una pagina base (denominata BasePage).Ho inserito la riga di codice sopra nella mia pagina di base e poi ho modificato alcune delle mie altre pagine per derivare da BasePage.Non riesco a superare questo errore:

Errore 12 'cts.idocv7.basepage' non può essere la radice di un file XAML perché è stato definito usando XAML.Linea 1 Posizione 22.C:\Work\iDoc7\CTS.iDocV7\UI\Quality\QualityControlQueuePage.xaml 1 22 CTS.iDocV7

Qualcuno sa come creare al meglio una pagina di base quando posso inserire eventi, proprietà, metodi, ecc. che voglio poter utilizzare da qualsiasi pagina WPF?

È stato utile?

Soluzione

Ecco come l'ho fatto nel mio progetto attuale.

Per prima cosa ho definito una classe (come ha detto @Daren Thomas - solo una semplice vecchia classe C#, nessun file XAML associato), come questa (e sì, questa è una vera classe - è meglio non chiedere):

public class PigFinderPage : Page
{
    /* add custom events and properties here */
}

Quindi creo una nuova pagina e modifico la sua dichiarazione XAML in questa:

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
    />

Quindi lo dichiaro come PigFinderPage nello spazio dei nomi "mio".Qualsiasi risorsa a livello di pagina di cui hai bisogno deve essere dichiarata utilizzando una sintassi simile:

<my:PigFinderPage.Resources>
    <!-- your resources go here -->
</my:PigFinderPage.Resources>

Infine, passa al code-behind per questa nuova pagina e modifica la sua dichiarazione di classe in modo che derivi dalla tua classe personalizzata anziché direttamente da Page, in questo modo:

public partial class EarmarkSearchPage : PigFinderPage

Ricordarsi di mantenerlo come classe parziale.

Per me funziona a meraviglia: posso definire una serie di proprietà ed eventi personalizzati in "PigFinderPage" e usarli in tutti i discendenti.

Altri suggerimenti

Inoltre, dai un'occhiata Eventi allegati e vedi se riesci ad allegare il tuo evento a ogni pagina della tua app.Potrebbe essere più semplice di una lezione intermedia personalizzata.

Non ne sono sicuro, ma guardando il tuo errore, proverei a definire la classe base solo con codice C# (.cs): non crearne una con XAML, solo un file .cs standard che estende la pagina WPF classe.

Qui è anche un tutorial!è piuttosto semplice e facile.

Piccolo aggiornamento:Ho appena provato a farlo e non ha funzionato.Lui è quello che ho cambiato per risolvere il problema:

1.In molti forum leggerai che le sottopagine devono ereditare da una semplice classe cs, senza XAML.Anche se funziona.Eredito da una normale pagina XAML senza alcun problema.

2.Ho sostituito il seguente codice:

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
/>

con

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="using:Qaf.PigFM.WindowsClient"
/>

perché quando avevo "clr-namespace" invece di "using", Intellisense poteva riconoscere PigFinderPage, ma non il compilatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top