5

tal vez podría ayudarme a entender por qué obtengo una excepción no controlada "XAML no válido" en el diseñador de Visual Studio 2010 al intentar hacer lo siguiente en un Page.Silverlight 4: "XAML no válido" utilizando el convertidor en DataTemplate

Tengo un Converter llamado DateTimeConverter que convierte una fecha en una cadena de fecha alemana. El convertidor funciona bien He incluido el espacio de nombres y añadió lo siguiente a los recursos de la página:

<navigation:Page.Resources> 
    <myClasses:DateTimeConverter x:Key="dateTime" /> 
</navigation:Page.Resources> 

ahora tengo un cuadro de lista que yo quiero que se unen a una lista de objetos. Hago el enlace en el código, pero me gustaría definir la plantilla de datos. Por lo tanto, he agregado lo siguiente a mi diseño:

<ListBox x:Name="lbConversation" BorderBrush="#00000000"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderThickness="0" Padding="4"> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding Message, Mode=OneWay}" /> 
        <TextBlock Text="{Binding TimeStamp, Mode=OneWay, Converter={StaticResource dateTime}}" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Y esto funciona bien cuando funciono. Sin embargo, en la sección de códigos, el código de la plantilla de datos está oculto y el diseñador dice "XAML no válido". Cuando elimino la parte Converter=..., este error se ha ido.

¿Este es un error de diseño? ¿Que puedo hacer?

EDITAR
Por cierto: El mismo código no lanza el error dentro de un proyecto de WPF!

+0

¿Hizo una compilación después de definir el convertidor en xaml y aplicarlo en el DataTemplate? – Jehof

+1

Como dije en mi pregunta: todo está bien cuando ejecuto la aplicación, lo que implica que la construí :-) También: acepté una respuesta antes de leer su comentario, eso lo resuelve. –

+0

Para cualquier persona que ingrese desde Google: también descubrí que tenía este problema cuando estaba ingresando un espacio de nombres en mi archivo XAML que ya no existía. –

Respuesta

7

Solo agregué a esta pregunta cuando encontré una solución.

La solución a mi caso era aquí: http://forums.silverlight.net/post/618518.aspx

Al parecer, usted no debe tener un carácter de espacio en el nombre del proyecto o nombre de ensamblado. D'oh!

Espero que ayude.

+0

Me olvidé por completo de esta pregunta. Cuando recibí errores en WPF "normal" también, me di cuenta de que los espacios en los nombres de los ensamblados causan este problema. –

+0

No tengo espacio en ninguno de mis ensamblajes y encuentro este problema, ¿hay alguna manera de depurar el diseñador para encontrar el problema real? – Shimmy

+0

Tenga cuidado de cambiar el nombre del proyecto (renómbrelo) Y el nombre del ensamblado (haga clic con el botón derecho en el proyecto/propiedades/nombre del ensamblaje). – Aliens

1

Lo sentimos, no se puede replicar esto en absoluto, ¿tiene algunos datos de tiempo de diseño que pueden ser la causa del extraño error?

Además, como dijiste que estás usando el convertidor para generar fechas alemanas ... ¿no sería más fácil dejar que el marco haga este tipo de cosas, ya que probablemente las haga mucho mejor? Establezca toda la información cultural de la cadena de aplicaciones en alemán y todo el formateo se realizará con la configuración de esa cultura; por supuesto, todavía es posible que solo quiera controles internacionalizados ...

+0

Hola, gracias por tu respuesta. Por supuesto, podría manejar el formato de fecha por marco. Pero también tengo otros convertidores, y el problema también ocurre para esos convertidores. –

1

No veo nada malo con su Xaml, pero me pregunto si esto es resultado de la configuración de idioma utilizada cuando se analiza el Xaml. De forma predeterminada, Xaml se analiza usando el InvariantCulture, sin embargo, parece que el diseñador en el estudio visual analiza el Xaml utilizando la cultura actual. Por lo tanto, a veces puede obtener diferencias inesperadas en el comportamiento en el momento del diseño de lo que lo hace en el tiempo de ejecución.

De hecho si usted hace esto en el constructor de su UserControl antes de llamar InitializeComponent: -

this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name); 

Puede que no necesite su convertidor en absoluto.

0

Me encontré con el error "XAML no válido" cuando mi convertidor se marcó como interno. Cambia el modificador a public y todo es como se esperaba.

Espero que esta ayuda.

+1

No, mis conversores ya son públicos. ¡Gracias de cualquier manera! –

Cuestiones relacionadas