UIElement basado en otra clase
-
28-09-2019 - |
Pregunta
I coloca un control en una rejilla. Digamos que el control se deriva de la clase pública 'ButBase' que se deriva a su vez de System.Windows.Controls.Button. El código normalmente se compila y aplicación funciona muy bien. Pero hay algo muy molesto.
Cuando intenta cambiar a la solapa xaml-diseño dirá 'El elemento raíz del documento no es compatible con el diseñador visual', lo cual es normal y estoy totalmente de acuerdo con eso, pero la cosa es, que toda la código XAML está subrayado y VS2010 dice: 'no se puede crear una instancia de ButBase' aunque todavía normalmente compila y capaz de ejecutar
He intentado el mismo código en VS2008, se dice que necesita ver a un constructor sin parámetros pública en el ButBase, e incluso después de poner uno que mostró el mismo error.
¿Qué te extraño aquí?
Solución
Asegúrese de que no es ButBase
abstract
. Diseñador no le gusta eso.
También asegúrese de que no se debe hacer ningún negocio divertido en su constructor, Initialized
y Loaded
manipuladores. Divertido incluye cualquier tarea no trivial, como conectarse a una base de datos o cualquier otra cosa que pueda interferir con el diseñador. Estos códigos se debe envolver con un diseñador-cheque. Hay un número de maneras de salir allí para comprobar si hay una presencia de diseñador pero he encontrado lo siguiente para bien de trabajo:
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;
}
}
}