c# silverlight resources resx

c# - El constructor de recursos de Silverlight siempre regresa a interno



resources resx (7)

La razón de esto es que usted no debe crear una instancia de la clase usted mismo. En su lugar, siempre debe usar ConsoleApplication1.Resource1.ResourceManager que a su vez ejemplifica la clase por usted.

Aquí, ConsoleApplication1 es el nombre de su ensamblaje y Resource1 el nombre de su archivo de recursos.

Cuando .resx mi archivo de recursos ( .resx ) agrego texto o lo .resx , el constructor de mi recurso siempre va a interno y luego de eso, cuando ejecuto mi Silverlight tengo un error en mi enlace XAML.

¿Hay alguna manera de evitar este escenario? Necesito entrar en el diseñador de mi recurso y poner el constructor en público para resolver el problema

Uso mi recurso de esta manera en mi archivo xaml

<UserControl.Resources> <resources:LibraryItemDetailsView x:Key="LibraryItemDetailsViewResources"></resources:LibraryItemDetailsView> </UserControl.Resources> <TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>


Puede crear una clase pública que exponga los recursos a través de una propiedad:

public class StringsWrapper { private static LibraryItemDetailsView _view = null; public LibraryItemDetailsView View { get { if (_view == null) { _view = new LibraryItemDetailsView(); } return _view; } } }

Luego, en su XAML puede acceder a su recurso:

<UserControl.Resources> <StringsWrapper x:Key="LibraryItemDetailsViewResources"></StringsWrapper> </UserControl.Resources> <TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=View.FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>

¡De esta forma el constructor de resx puede ser interno!



Creé una macro para hacer esto por mí para cada archivo que edito. Todavía tengo que acordarme de ejecutarlo, pero es mucho más rápido. Por favor mira mi publicación .


Bueno, lo que hice fue agregar una utilidad de línea de comandos para precompilar el evento de cada proyecto de Silverlight que reemplaza cada string internal con public :)

Puede editar eventos previos y posteriores a la construcción: haciendo clic con el botón derecho en un proyecto -> Properties -> Build Events .

Usé una utilidad llamada RXFIND , es gratis y puede reemplazar una cadena dentro de los archivos seleccionados usando una expresión regular RegEx .

Aquí está la línea de comando que estoy usando:

"$(SolutionDir)ThirdParty/rxfind/rxfind.exe" "$(ProjectDir)Resources/*.Designer.cs" "/P:internal " "/R:public " /Q /B:2

Tenga en cuenta que todos mis recursos se encuentran en el directorio de recursos dentro de cada proyecto y la utilidad de línea de comandos reside en el /ThirdParty/rxfind


También tengo el mismo error. Para resolver el problema, acabo de crear una public class que hereda de la clase que representa el archivo de recursos, sabiendo que también debe ser de clase pública, esta es mi excepción:

public class TrackResourceWrapper : TrackResource { }

con: TrackResourceWrapper hereda la clase TrackResource es la clase que se encuentra en el archivo de recursos de código detrás (clase pública)


Simplemente:

  1. Agregue una nueva clase que hereda de la clase de recursos
  2. En el archivo App.xaml, modifique la clase de recurso que creó

¡Hecho!