2011-08-26 7 views
11

Tengo un ResourceDictionary que contiene cadenas:cómo declarar una cadena vacía en XAML ResourceDictionary

<ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <sys:String x:Key="Foo">Hello world</sys:String> 
    ... 
</ResourceDictionary> 

Este diccionario es parte de un tema, y ​​en algunos temas, algunos de los hilos están vacías:

<sys:String x:Key="Foo"></sys:String> 

El problema es que, en ese caso, aparece un XamlParseException:

no se puede crear el objeto del tipo ' System.String '. CreateInstance falló, que puede ser causada por no tener un constructor público predeterminado para 'System.String'

Sé que es posible declarar una cadena vacía en un recurso matriz, utilizando <x:Static Member="sys:String.Empty" />, pero yo no' t quiere una matriz ... Usar x:Static directamente a medida que el recurso devuelve la extensión de marcado, no la cadena. Poner x:Static en el elemento sys:String da el mismo error que antes.

¿Es posible declarar una cadena vacía como un recurso XAML? ¿Cómo?

Respuesta

16

Declarar que el uso de x:Static parece funcionar bien para mí ...

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Test" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <x:Static x:Key="empty" Member="sys:String.Empty" /> 
</ResourceDictionary> 
cc.Content = (string)FindResource("empty"); //Casts to string without exception 
+0

Tienes razón ... probablemente en mal estado en algún lugar cuando intenté. ¡Gracias! –

+1

Aunque no funciona en Xaml ... si intentas algo como '' obtienes un error que dice ** Un objeto del tipo StaticExtension no se puede aplicar a una propiedad que espera el tipo System.String ** –

+0

Hmm, el diseñador estaba dando ese error. Intenté una reconstrucción y el error desapareció. Cambiar la clave, compilarla, cambiarla y construirla hace que el error regrese y después de la próxima compilación desaparecerá. Sólo un error de diseñador parece ... +1 –

Cuestiones relacionadas