8

Tengo un proyecto en VS2010 que usa XAML y ahora necesito cargarlo en Expression Blend 4. El proyecto se compila y se ejecuta en VS2010 y este es el primero tiempo que ha sido cargado en Blend. SÍ construye y ejecuta en Blend aunque los miembros no sean reconocidos.Error de propiedad no reconocido o no accesible al cargar proyecto VS2010 en Expression Blend

¿Por qué no se reconoce la propiedad Scale y por qué aparece como un error cuando funciona?

EDIT Aunque esto se crea y se ejecuta, el XAML no se muestra gráficamente en la combinación y, por lo tanto, no puede ser modificado por un usuario no técnico.

En varios de los archivos .xaml que contienen referencias a controles de usuario no es un atributo que no es reconocido por mezcla con el error:

The member "XXXX" is not recognized or is not accessible 

existe la propiedad en el código detrás de archivo .cs y en cada caso, el mensaje de error es el mismo.

He visto muchas respuestas posibles a esto en Internet, pero ninguna de ellas es una solución. Los elementos a los que se hace referencia no son de solo lectura. Las diferentes clases y propiedades son públicas. También agregué la siguiente referencia de WPF en el archivo .csproj, que faltaba.

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 

En el siguiente código, el atributo Escala no se reconoce aunque exista como propiedad en el control de usuario.

Aquí es el control de usuario en MyLogo.xaml:

<UserControl x:Class="NamespaceX.NamespaceY.UI.Shapes.MyLogo" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="132" Width="105"> 
<Canvas> 
    <Canvas.LayoutTransform> 
     <ScaleTransform x:Name="st" CenterX="0" CenterY="0" /> 
    </Canvas.LayoutTransform> 
    <Image Source="/Client;component/Images/MyLogo.png"/> 
</Canvas> 

Aquí está el código detrás de MyLogo.xaml.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace NamespaceX.NamespaceY.UI.Shapes 
{ 
/// <summary> 
/// Interaction logic for MyLogo.xaml 
/// </summary> 
public partial class MyLogo : UserControl 
{ 
    public double Scale 
    { 
     get 
     { 
      return st.ScaleX; 
     } 
     set 
     { 
      st.ScaleX = value; 
      st.ScaleY = value; 
     } 
    } 

    public MyLogo() 
    { 
     InitializeComponent(); 
    } 
} 
} 

En mi archivo me Navigation.xaml tenga esto:

<UserControl x:Class="NamespaceX.NamespaceY.UI.UserControls.Navigation" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:shape="clr-namespace:NamespaceX.NamespaceY.UI.Shapes"  
Height="185" Width="1280" Loaded="UserControl_Loaded"> 
<FrameworkElement.Resources> 
    <ResourceDictionary Source="../Resources/Main.xaml" /> 
</FrameworkElement.Resources> 
<Canvas> 
    <shape:MyLogo Scale="1.2" Height="181.483" Canvas.Left="38" Canvas.Top="4" Width="188" /> 
    <StackPanel Canvas.Left="205" Canvas.Top="-2" Width="1062"> 

    </StackPanel> 
</Canvas> 

Respuesta

17

Aquí está la solución. En el archivo .csproj de la aplicación, cambiar esta situación:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> 

a esto:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 

No se deje engañar por el hecho de que Visual Studio informa que se está ejecutando en Cualquier CPU más en el gestor de configuración. Debe editar a mano el archivo .csproj.

+0

Esta configuración no tiene nada que ver con el error anterior. Mi proyecto tiene AnyCPU por defecto en el archivo .csproj, y todavía me enfrento a este error :) – balint

+0

Sí, ¿qué tiene esto que ver con algo? –

+0

no tiene nada que ver, ¿cómo podría marcarse como respuesta –

0

Tuve el mismo problema en Silverlight resulta que era el espacio de nombres que tenía en mi control de usuario era demasiado largo, lo hice más corto y funciona. ¡Espero eso ayude!

0

Pude reproducir/corregir este problema consistentemente con un proyecto de vb.net en VS2012. En Proyecto ... Propiedades ... Compilar ... La CPU de destino está configurada en AnyCPU (valor predeterminado). Todo funciona bien

Cambiar la CPU de destino de 64 bits, Guarde y genere

Cierre y vuelva a abrir la solución.

ahora recibe el "El elemento 'XXXX' no es reconocido o no es accesible" error

Cambiar la CPU de destino de nuevo a cualquier CPU, Guarde y genere

La ventana muestra ahora correctamente.

10

Se relacionan en el hecho de que cambiar la plataforma cambia los conjuntos en caché. La respuesta aceptada no es aceptable.

Esto es lo que yo recomiendo:

  1. Cierre todos los archivos
  2. Limpiar la solución
  3. Reconstruir la solución

El XAML afectada debe ahora estar libre de errores de generación.

Esto funciona para mí, sus resultados pueden variar.

0

Tuve también la misma excepción. Mi problema era que el Tipo de la propiedad estaba en un ensamblado, al que no se hizo referencia en el Proyecto, donde utilizo UserControl.

1

Cambiar las propiedades de compilación del proyecto a 'Cualquier CPU' resolvió el problema para mí. Todavía no puedo entender cómo se relaciona eso con el problema. Pero por supuesto que hizo la magia.

1

Como han dicho otros, cambiar el destino de x64 a AnyCPU corrige los errores en el diseñador, por extraño que parezca.

encontré la siguiente en el foro de Visual Studio:

(Q) vista de diseño no está disponible para las plataformas de destino x64 y ARM cuando el documento contiene elementos personalizados (XAML con un control de usuario, por ejemplo).

(A) Comenzando con Visual Studio 2015, le hemos permitido diseñar/crear su XAML incluso cuando se dirige a cualquier cosa que no sea x86. La actualización 2 de Visual Studio 2015 debe reunir varias correcciones y cambios para que esta experiencia funcione aún mejor.

Sin embargo, vale la pena señalar que no podremos ejecutar ningún código que haya escrito en el diseñador cuando el proyecto se dirige a cualquier cosa que no sea x86. Esto se debe a la restricción de que un proceso x86 (que es el diseñador XAML) no puede ejecutar código ARM o x64. Debería poder ver y editar todo el XAML en la página, con cualquier tipo personalizado reemplazado por reemplazos para preservar la experiencia WYSIWYG tanto como sea posible (y cambiar a x86 cuando realmente le importa ejecutar el código en el diseñador).

Cuestiones relacionadas