UIElement basé sur une autre classe
-
28-09-2019 - |
Question
I a placé une commande dans une grille. Disons que le contrôle est dérivé de la classe publique « ButBase » qui est dérivé à son tour de System.Windows.Controls.Button. Le code compile normalement et l'application fonctionne très bien. Mais il y a quelque chose de vraiment ennuyeux.
Lorsque vous essayez de passer à l'onglet XAML-conception, il dira « L'élément racine du document est pas pris en charge par le concepteur visuel », ce qui est normal et je suis tout à fait d'accord avec cela, mais la chose est, que tous les le code XAML est souligné et VS2010 dit:. « Impossible de créer une instance de ButBase », bien que toujours normalement et compile en mesure d'exécuter
J'ai essayé le même code dans VS2008, il a dit que besoin de voir un constructeur parameterless public dans le ButBase, et même après que je mets un, il a montré la même erreur.
Que me manque ici?
La solution
Assurez-vous ButBase
n'est pas abstract
. Designer ne pas comme ceux-ci.
Assurez-vous également de ne pas faire toute entreprise drôle dans votre constructeur, les gestionnaires de Initialized
et Loaded
. Drôle inclut toutes les tâches non triviales, comme la connexion à une base de données ou toute autre chose qui pourrait interférer avec le concepteur. Tout code tel doit être enveloppé avec un chèque de concepteur. Il y a plusieurs façons là-bas pour vérifier une présence de designer, mais j'ai trouvé ce qui suit pour le travail 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;
}
}
}