2009-09-30 24 views
5

Questa è la mia prima incursione nei controlli personalizzati e non sta andando bene. Ho un controllo grafico personalizzato derivato da Canvas.controllo personalizzato wpf non riconosciuto

namespace Grapher2 { 
    public class SeriesManager : Canvas { 
     public SeriesManager() { 
      ... 
     } 
    } 
} 

È definito nello stesso progetto e spazio dei nomi della mia app. Ho provato ad aggiungere un riferimento al controllo in XAML come segue:

<Window x:Class="Grapher2.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:graph="clr-namespace:Grapher2" 
Title="Grapher" Width="800" Height="600"> 

<StackPanel Name="container" Width="700" Height="500"> 
    <graph:SeriesManager Name="seriesManager" Width="700" Height="500" /> 
</StackPanel> 

Ma quando provo a fare riferimento al nome di controllo "seriesManager" nel code-behind per la finestra, ottengo "Il nome 'seriesManager' non esiste nel contesto corrente. "

Inoltre, l'editor XAML non esegue il rendering della finestra, dando un'enorme traccia di stack con l'errore: "Digitare" MS.Internal.Permissions.UserInitiatedNavigationPermission "in Assembly" PresentationFramework, Versione = 3.0.0.0, Culture = neutro, PublicKeyToken = 31bf3856ad364e35 'non è contrassegnato come serializzabile. "

Immagino che la soluzione sia qualcosa di stupidamente semplice per chiunque abbia eseguito controlli personalizzati. Ma sono perplesso.

risposta

11

hai provato x: Name = "seriesManager" nel tuo xaml?

Modifica: questo potrebbe non essere il problema visto come hai detto che il tuo xaml non sta eseguendo il rendering. Immagino che una volta ottenuto il xaml da renderizzare nel designer ... il codice dietro funzionerà meglio.

Edit 2: Ogni volta che ho avuto un problema con il rendering del designer, è perché sto facendo qualcosa nel costruttore del mio controllo personalizzato. Controlla il tuo SeriesManager per vedere se stai facendo qualcosa nel suo costruttore che sta causando un problema. Forse ti stai riferendo a qualcosa che non esiste ancora. Se si dispone di codice aggiuntivo nel costruttore, prendere in considerazione la possibilità di spostarlo nell'evento UserControl_Loaded.

+4

x: Il nome è necessario per i riferimenti all'interno dello stesso assembly, questo dovrebbe risolvere il problema di non poter fare riferimento a "seriesManager" nel code-behind. maggiori informazioni: http://stackoverflow.com/questions/1380112/why-cant-i-use-the-name-attribute-on-usercontrol-in-the-same-assembly – Zenuka

+0

Oh e BTW utilizzando invece x: Name di Nome potrebbe risolvere tutti i tuoi problemi, prova prima questo e facci sapere se ci sono più problemi ... – Zenuka

+1

x: Nome risolto! Grazie! – Klay

0

Backup risposta di Scott qui, dal momento che mi ha aiutato a risolverlo:

cosa ho sbagliato stavo cercando di accedere al controllo PRIMA InitializeComponent(), ma ero confuso da 2 altri messaggi di errore da qualche altra parte nel codice. Nel caso in cui qualcun altro ha questo errore.

Problemi correlati