当我修改我的资源文件(.resx
)添加文本或修改时,我的资源的构造函数总是进入内部,之后,当我运行我的silverlight时,我的绑定XAML出错。
有没有办法避免这种情况?我需要进入我的资源的设计者并将构造函数公开以解决问题
我在我的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>
答案 0 :(得分:4)
在没有代码更改的情况下执行此操作的另一种方法如下所示。对我来说很好。
答案 1 :(得分:3)
您可以创建一个通过属性公开资源的公共类:
public class StringsWrapper
{
private static LibraryItemDetailsView _view = null;
public LibraryItemDetailsView View
{
get
{
if (_view == null)
{
_view = new LibraryItemDetailsView();
}
return _view;
}
}
}
然后在您的XAML中,您可以访问您的资源:
<UserControl.Resources>
<StringsWrapper x:Key="LibraryItemDetailsViewResources"></StringsWrapper>
</UserControl.Resources>
<TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=View.FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>
这样resx构造函数可以是内部的!
答案 2 :(得分:1)
好吧,我做的是添加一个命令行实用程序来预先构建每个Silverlight项目的事件,用internal
替换每个string
public
:)
您可以通过以下方式编辑预构建和后期构建事件:右键单击项目 - &gt; Properties
- &gt; Build Events
。
我使用了一个名为RXFIND的实用程序,它是免费的,可以使用RegEx
正则表达式替换所选文件中的字符串。
这是我正在使用的命令行:
"$(SolutionDir)ThirdParty\rxfind\rxfind.exe" "$(ProjectDir)Resources\*.Designer.cs" "/P:internal " "/R:public " /Q /B:2
请注意,我的所有资源都位于每个项目的资源目录下,命令行实用程序位于\ThirdParty\rxfind
目录
答案 3 :(得分:1)
我也有同样的错误。为了解决这个问题,我刚刚创建了一个继承自表示资源文件的类的public class
,知道它也必须是公共类,这是我的exep:
public class TrackResourceWrapper : TrackResource
{
}
使用:
TrackResourceWrapper
继承了类
TrackResource
是位于(公共类)
答案 4 :(得分:1)
简单地:
完成!
答案 5 :(得分:0)
原因是你不应该自己实例化这个类。你应该总是使用ConsoleApplication1.Resource1.ResourceManager
,它本身为你实例化。
此处,ConsoleApplication1
是程序集的名称,Resource1
是资源文件的名称。
答案 6 :(得分:0)
我为我编辑的每个文件创建了一个宏来执行此操作。我仍然要记得运行它,但速度要快得多。请参阅my post。