Silverlight资源构造函数始终返回内部

时间:2010-10-19 18:27:44

标签: c# silverlight resources resx

当我修改我的资源文件(.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>

7 个答案:

答案 0 :(得分:4)

在没有代码更改的情况下执行此操作的另一种方法如下所示。对我来说很好。

http://guysmithferrier.com/post/2010/09/PublicResourceCodeGenerator-now-works-with-Visual-Studio-2010.aspx

答案 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)

简单地:

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

答案 5 :(得分:0)

原因是你不应该自己实例化这个类。你应该总是使用ConsoleApplication1.Resource1.ResourceManager,它本身为你实例化。

此处,ConsoleApplication1是程序集的名称,Resource1是资源文件的名称。

答案 6 :(得分:0)

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