2012-06-07 4 views
5

La versión corta ¿Cómo se maneja ups mirada estática de recursos en UserControls que se incrustan en otros controles de ventanas/usuario/personalizados? Para que Blend 4 lo represente correctamente @ design time, algo que Visual Studio ya hace por usted.Cómo resolver Design recursos estáticos vez en UserControls incrustados en Blend 4

la versión larga Como sugiere la pregunta, tenemos una ventana que tiene algunos controles de usuario incrustadas y la ventana, así cada uno como control de usuario incrustado todo el uso de extensiones de marcado de recursos estáticos para resolver referencias a los recursos que se encuentran en un fusionada diccionario en el archivo app.xaml.

Blend no tiene problemas para cargar y representar cualquiera de los controles de usuario de muestra que hice en VS Designer Surface cuando se abren individualmente. No tiene problemas para resolver las innumerables extensiones de marcas de recursos estáticos que empleo en casi todos lados.

Siempre que intento abrir mi 'MainWindow.xml', (un control de ventana) me di cuenta de que estaba recibiendo 4 - No se puede crear instancia de tipo errores con Blend 4 muy bien que me dice sobre la mesa de trabajo que se ha atrapado algunas excepciones de tiempo de diseño. Profundizando en estas excepciones adjuntando la instancia del depurador VS a Blend, noté que cada recurso estático al que hacía referencia, se quejaba de que no podía encontrarlo.

Como comparación busqué un control personalizado que creé, no empleó ningún recurso estático en absoluto, sino que fueron recursos locales. Este control personalizado cuando estaba incrustado en un UserControl que noté funcionó bastante bien. ¡Creo que es obvio por qué!

¿Alguien en SO tiene alguna idea sobre cómo solucionar este problema? Probé todo el 'Agregar un diccionario de tiempo de diseño' <, que funciona parcialmente, ¡los controles de usuario incrustados aún no se crean en absoluto!

investigación

  1. MVVM Light + Blend designer view error: Cannot find resource named 'Locator'
  2. Theming using resources without Blend vomitting

ACTUALIZACIÓN: Las soluciones posibles:

  1. Empleando un enfoque simialr presentado aquí: GianlucaCucco Answer
  2. ¿Convierte todas las búsquedas de recursos estáticos en recursos locales para UserControls?
  3. Convierta todas las búsquedas de recursos estáticos en recursos dinámicos.

Ninguna de estas soluciones es bonita. = (

Respuesta

1

Tengo varios recursos en un archivo Converters.xaml que Blend solía quejarse. Mi solución es cargar a la fuerza ese archivo xaml en el momento del diseño.

using System; 
using System.ComponentModel; 
using System.IO; 
using System.Windows; 
using System.Windows.Markup; 

public static class DesignTimeSupport 
{ 
    public static void LoadCommonConvertersForBlend(this ResourceDictionary resourceDictionary) 
    { 
     if (resourceDictionary == null || !DesignerProperties.IsInDesignTool) return; 

     var convertersXamlUri = new Uri("Assets/Converters.xaml", UriKind.Relative); 
     var streamInfo = Application.GetResourceStream(convertersXamlUri); 
     using (var reader = new StreamReader(streamInfo.Stream)) 
     { 
      var converters = (ResourceDictionary)XamlReader.Load(reader.ReadToEnd()); 
      resourceDictionary.MergedDictionaries.Add(converters); 
     } 
    } 
} 

El ViewBase llama a este método en el constructor.

public class ViewBase : Page 
{ 
    public ViewBase() 
    { 
     Resources.LoadCommonConvertersForBlend(); 
    } 
} 

clases que no heredan de ViewBase hacen su propia llamada.

+0

¿Has probado la definición de aplicación condicional mencionada anteriormente? Parece que sería más fácil, si funcionó. Menos código = mejor, ¿verdad? –

+0

No había visto eso antes. Sin embargo, la mayoría de nuestros recursos están fuera de App.xaml y, como resultado, Blend no los carga. Cargar a la fuerza los otros 4 archivos xaml que tenemos fue el enfoque menos intrusivo en el que nos decidimos. –

+0

DesignerProperties.IsInDesignTool ??? ¿Ese es otro de tus métodos de extensión? ¿También puedes decirme qué espacios de nombres estás usando también? Resharper se está volviendo loco en este momento: S – IbrarMumtaz

1

Trate this answer -.. Que suena como un problema similar no he tenido ocasión de usar todavía, así que estoy curioso por saber si es o no funciona para usted Es ciertamente menos sucio que el otro soluciones.

+0

TY - echaremos un vistazo a eso mañana. Mi cerebro está frito en este momento. – IbrarMumtaz

0

Por extraño que pueda parecer (y no puedo encontrar una razón lógica por la cual), el mensaje de error mostró el recurso que no podía encontrar como "maindictionary.xaml", mientras que el archivo y todas las referencias eran "MainDictionary.xaml ".

Abrí las propiedades del recurso en el Explorador de soluciones, cambié el Nombre de archivo a manidictionary.xaml, luego de nuevo a MainDictionary.xaml y desaparecieron los cinco mensajes de error que recibía ...

Espero que esta respuesta llegue a manos de otra persona que pueda estar luchando con el problema esotérico y que ayude.

Cuestiones relacionadas