2010-03-02 22 views
9

Mi pregunta está relacionada con el soporte en tiempo de diseño de WPF. De MSDN leí,Creación de un entorno de tiempo de diseño personalizado

El diseñador WPF proporciona un marco y una API pública que se puede utilizar para poner en práctica adorners personalizados, herramientas, editores de propiedades, y diseñadores.

Pero la gran mayoría de los ejemplos que he encontrado son triviales, y no ilustran mucho sobre la creación de un diseñador personalizado en una aplicación WPF existente. Hemos migrado nuestra aplicación de Windows Forms a WPF durante el año pasado, y el siguiente paso será tomar un diseñador de panel de WinForms existente y reescribirlo en WPF.

Baste decir que este será un gran proyecto. Pero ni siquiera sé por dónde empezar. Me pregunto si alguno de ustedes ha tenido experiencias similares al escribir un diseñador personalizado para una aplicación de WPF, y cómo fue. Aún mejor, si pudiera comparar y contrastar la funcionalidad entre el diseñador de WinForms y el diseñador de WPF, o explicar la transición de la primera a la última, sería útil. Si conoce algún ejemplo simple que demuestre un entorno de diseño personalizado (con controles personalizados, etc.) sería extremadamente beneficioso.

En general, me pregunto si muchas personas han emprendido esto todavía, y cuáles han sido sus resultados.

EDIT: Para aclarar, sí, estoy hablando de alojar un diseñador de WPF. Parece que esto ni siquiera es posible, que es un gran revés. Aquí hay una captura de pantalla de nuestro diseñador actual de WinForms. Como puede ver, se usa para crear interfaces de usuario personalizadas. Puede arrastrar controles personalizados sobre él y diseñarlos, luego poner el panel en un "modo de ejecución" en el que todos los controles se vuelven funcionales.

A falta de pasar meses escribiendo a nuestro diseñador, ¿sería posible hacerlo en WPF? ¿Qué hay de .NET 4.0 y VS2010? ¿Añaden ellos alguna funcionalidad de diseñador?

alt text http://img94.imageshack.us/img94/5378/oldpaneldesigner.png

Respuesta

2

Desafortunadamente, puede que no haya una buena respuesta en función de exactamente lo que quiere hacer. Su pregunta es un poco vaga sobre exactamente lo que está tratando de hacer. ¿Está tratando simplemente de extender el diseñador existente dentro de Visual Studio, o está tratando de alojar el diseñador de WPF en su propia aplicación por separado?

En este último caso, lamentablemente no podrá hacerlo. El diseñador de WinForms era en realidad parte de .NET Framework (no de Visual Studio) y, por lo tanto, era accesible para cualquier aplicación que proporcionara el entorno de alojamiento correcto. Hay a good article on MSDN on how to do that here y another one on from DivElements here.

Muchas personas han preguntado en otros foros si esto es posible usando Cider (el nombre en clave para el diseñador de WPF) y it seems like the answer is no. Su única alternativa potencial es rediseñar su aplicación para hacer uso del Visual Studio Isolated Shell. Hay un good overview of the options here.

EDIT: Parece que SharpDevelop puede tener un diseñador de WPF que puede utilizar. No estoy 100% seguro de si desarrollaron el suyo propio, o si descubrieron una forma de hospedarlo, pero puedes ver su origen y decidir por ti mismo. Vaya a Daily Builds of Sharp Develop (es no en la versión oficial todavía) y obtenga la última compilación diaria.En ese archivo zip, mira el directorio Samples/XamlDesigner.

+0

He editado mi pregunta para agregar información. Estamos tratando de alojar al diseñador en nuestra aplicación, y obviamente, el Shell aislado no es una solución para nosotros. Estoy sorprendido de que haya una falta de soporte por parte de Microsoft en este tema, parece que simplemente han ignorado la posibilidad de este escenario. – Charlie

+0

No parece que hayan ignorado el escenario ... sino que se han quedado sin tiempo o B. Decidieron que la mejor manera de hacerlo y controlar el uso era a través de Shell aislado. Sin embargo, mire la carcasa aislada ... es ALTAMENTE personalizable. – Nick

+1

Editado para agregar otro recurso posible ... SharpDevelop puede haber descubierto una forma de hacerlo. Hay un enlace a su código en mi respuesta editada. – Nick

Cuestiones relacionadas