mvvm-light - mvvmlightlibs - mvvm light uwp
MVVM Light+Blend diseƱador vista error: No se puede encontrar el recurso llamado ''Localizador''. (7)
La aplicación funciona bien pero no pude ver mi diseño en la vista del diseñador.
Dice No se puede encontrar el recurso llamado ''Localizador''. Obviamente, no cambié nada en el código, solo hice el enlace de datos usando el diálogo de enlace de datos ...
¿Alguien enfrenta el mismo problema?
Asegúrese de que Blend haya abierto toda la solución y NO solo el proyecto que contiene las vistas. Estaba haciendo clic con el botón derecho en Visual Studio y seleccionando Abrir en Expression Blend. Para mi sorpresa, Blend no pudo encontrar el archivo de la solución, por lo que solo abrió el proyecto único.
Cuando me di cuenta de esto, lancé Blend directamente, lo apunté al archivo de la solución, y luego Blend pudo encontrar el ViewModelLocator en mi opinión.
En MyUserControl.xaml, en lugar de:
DataContext="{Binding Main, Source={StaticResource Locator}
utilizar:
d:DataContext="{Binding Main, Source={StaticResource Locator}
donde "d" ha sido definido previamente como:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Hay dos casos conocidos donde esto puede suceder.
Si cambia a Blend antes de crear la aplicación, las DLL aún no están disponibles y se puede ver este error. La construcción de la aplicación resuelve el problema.
Hay un error en Expression Blend donde, si está colocando un control de usuario en otro control de usuario (o Ventana en WPF), y el control de usuario interno usa un recurso global, no se puede encontrar el recurso global. En ese caso obtendrá el error también.
Desafortunadamente no tengo una solución para el segundo punto, ya que es un error de mezcla. Espero que veamos una resolución para eso pronto, pero parece que todavía está allí en la Mezcla 4.
Lo que puedes hacer es
Ignore el error cuando trabaje en el control de usuario externo. Cuando trabaje en el control interno del usuario, debería ver bien los datos de tiempo de diseño (no muy satisfactorio, lo sé).
Utilice d: DataContext para establecer el contexto de datos de tiempo de diseño en Fusionar temporalmente.
Esperemos que esto ayude,
Laurent
He encontrado una solución a este problema razonablemente aceptable, ya que no parece haber sido corregido en la Mezcla 4:
En el constructor de su XAML UserControl solo agregue los recursos que necesita, siempre que esté en modo de diseño dentro de Blend. Esto puede ser solo el Localizador, o también Estilos y Convertidores, según corresponda.
public partial class OrdersControl : UserControl
{
public OrdersControl()
{
// MUST do this BEFORE InitializeComponent()
if (DesignerProperties.GetIsInDesignMode(this))
{
if (AppDomain.CurrentDomain.BaseDirectory.Contains("Blend 4"))
{
// load styles resources
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "Resources/Styles.xaml"), UriKind.Absolute);
Resources.MergedDictionaries.Add(rd);
// load any other resources this control needs such as Converters
Resources.Add("booleanNOTConverter", new BooleanNOTConverter());
}
}
// initialize component
this.InitializeComponent();
}
Puede haber algunos casos de borde, pero está funcionando bien para mí en los casos simples donde antes recibía un gran símbolo de error rojo. Me encantaría ver sugerencias sobre cómo resolver mejor este problema, pero esto al menos me permite animar los controles de usuario que de lo contrario aparecen como errores.
También puede extraer la creación de recursos para App.xaml.cs
:
internal static void CreateStaticResourcesForDesigner(Control element)
{
if (AppDomain.CurrentDomain.BaseDirectory.Contains("Blend 4"))
{
// load styles resources
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "Resources/Styles.xaml"), UriKind.Absolute);
element.Resources.MergedDictionaries.Add(rd);
// load any other resources this control needs
element.Resources.Add("booleanNOTConverter", new BooleanNOTConverter());
}
}
y luego en el control haga esto ANTES de InitializeComponent ():
// create local resources
if (DesignerProperties.GetIsInDesignMode(this))
{
App.CreateStaticResourcesForDesigner(this);
}
Nota: en algún momento esto dejó de funcionar para mí y terminé codificando la ruta de acceso a Styles.xaml porque me frustraba al intentar averiguar en qué directorio estaba.
rd.Source = new Uri(@"R:/TFS-PROJECTS/ProjectWPF/Resources/Styles.xaml", UriKind.Absolute);
Estoy seguro de que podría encontrar el camino correcto en 5 minutos de trabajo, ¡pero intente esto si está en su apogeo al final como lo estaba yo!
La razón y la solución explicadas aquí http://blogs.msdn.com/b/unnir/archive/2009/03/31/blend-wpf-and-resource-references.aspx
Mira (b) parte de la publicación.
Simplemente agregue esto en su App.xaml.cs al principio
Aquí está mi pieza de código
[STATThread()]
static void main(){
App.Current.Resources.Add("Locator", new yournamespace.ViewModel.ViewModelLocator());
}
public App(){
main();
}
Tuve un problema similar con un recurso de control de usuario.
Agregué esto en mi código xaml de usercontrol:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/GinaControls;component/Resources/GinaControlsColors.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
Donde GinaControls
es el espacio de nombres donde se declara la clase de control y /Resources/GinaControlsColors.xaml
es la carpeta del proyecto y el nombre del archivo de recursos xaml.
Espero que esto ayude.