Silverlight资源构造器始终返回到内部。

10
当我修改资源文件(.resx)并添加或修改文本时,我的资源构造函数总是转为 internal,然后当我运行我的 Silverlight 时,在我的绑定 XAML 中出现错误。有没有办法避免这种情况?我需要进入资源的设计器,并将构造函数设置为 public 来解决问题。我在 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>

我遇到了相同的问题,很烦人... - Rumplin
我已经在WPF中完成了这个,同样适用于Silverlight。 - Mike Fuchs
7个回答

4

这是最佳答案。安装exe并将资源文件的Custom Tool属性设置为“PublicResourceCodeGenerator”。 - bkaid

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构造函数就可以是internal类型的!

1
我也遇到了相同的错误。为了解决这个问题,我创建了一个公共类,继承自代表资源文件的类,知道它也必须是公共类,这是我的代码示例:
public class TrackResourceWrapper : TrackResource
{
}

关于: TrackResourceWrapper 是继承类, TrackResource 是位于代码资源文件中的类(公共类)。


1

简单来说:

  1. 添加一个继承自资源类的新类
  2. 在App.xaml文件中修改您创建的资源类

完成!


1

好的,我的做法是为每个 Silverlight 项目的预构建事件添加一个命令行工具,用 RegEx 正则表达式将每个 internal string 替换为 public :)

你可以通过右键单击项目 -> 属性 -> 构建事件 来编辑预构建和后构建事件。

我使用了一个叫做 RXFIND 的实用工具,它是免费的,并且可以在所选文件中使用正则表达式替换字符串。

这是我正在使用的命令行:

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

请注意,所有我的资源都位于每个项目的Resource目录下,命令行实用程序位于\ThirdParty\rxfind目录中。

0
这是因为您不应该自己实例化类。相反,您应该始终使用ConsoleApplication1.Resource1.ResourceManager,它会为您实例化类。
这里, ConsoleApplication1 是您的程序集的名称, Resource1 是您的资源文件的名称。

你能给我一个绑定的例子吗? - Cédric Boivin
你提到的ResourceManager没有公开字符串变量,因此它不可绑定。你需要使用GetX方法来获取其中的任何值。 - AlignedDev

0

我创建了一个宏来为我编辑的每个文件执行此操作。我仍然需要记得运行它,但速度要快得多。请参见我的帖子


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接