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!
Otra forma de hacerlo sin cambios de código es la siguiente. Funcionó bien para mí
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:
- Agregue una nueva clase que hereda de la clase de recursos
- En el archivo App.xaml, modifique la clase de recurso que creó
¡Hecho!