UIElement sulla base di un'altra classe
-
28-09-2019 - |
Domanda
I collocato un controllo in una griglia. Diciamo che il controllo è derivata dalla public class 'ButBase' che deriva a sua volta da System.Windows.Controls.Button. Il codice compila normalmente e applicazione funziona bene. Ma c'è qualcosa di davvero fastidioso.
Quando si tenta di passare alla scheda XAML-design si dirà 'L'elemento radice del documento non è supportata dal visual designer', che è normale e io sono totalmente d'accordo con questo, ma la cosa è, che tutti i XAML è sottolineato e VS2010 dice:. 'non è possibile creare un'istanza di ButBase' anche se ancora compila normalmente e in grado di eseguire
ho provato lo stesso codice in VS2008, ha detto che ha bisogno di vedere un costruttore senza parametri pubblico nella ButBase, e anche dopo ho messo uno che ha dimostrato lo stesso errore.
Cosa mi manca qui?
Soluzione
Assicurarsi ButBase
non è abstract
. Designer non lo fa come quelli.
Inoltre assicuratevi di non fare qualsiasi attività divertente nel costruttore, Initialized
e Loaded
gestori. Divertente comprende qualsiasi attività non banali, come la connessione a un database o qualsiasi altra cosa che potrebbe interferire con il progettista. Tale codice dovrebbe essere avvolto con un designer-check. Ci sono un certo numero di vie d'uscita lì per controllare che la presenza del designer, ma ho trovato il seguente al lavoro ok:
internal static class DesignModeChecker
{
private static bool? _isInDesignModePriv;
public static bool IsInDesignMode
{
get
{
if (!_isInDesignModePriv.HasValue)
{
_isInDesignModePriv = Process.GetCurrentProcess().ProcessName.ToLower().Trim() == "devenv" && !Debugger.IsAttached;
}
return _isInDesignModePriv.Value;
}
}
}