Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight资源构造函数始终返回到内部_C#_Silverlight_Resources_Resx - Fatal编程技术网

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

C# Silverlight资源构造函数始终返回到内部,c#,silverlight,resources,resx,C#,Silverlight,Resources,Resx,当我修改我的资源文件(.resx)添加文本或修改时,我的资源的构造函数总是转到内部,之后,当我运行silverlight时,我的绑定XAML中有一个错误 有没有办法避免这种情况?我需要进入我资源的设计器中,将构造函数公开以解决问题 我在xaml文件中这样使用我的资源 这样做的原因是您不应该自己实例化该类。您应该始终使用ConsoleApplication1.Resource1.ResourceManager,它本身为您实例化了类 此处,ConsoleApplication1是程序集的名称,Res

当我修改我的资源文件(
.resx
)添加文本或修改时,我的资源的构造函数总是转到内部,之后,当我运行silverlight时,我的绑定XAML中有一个错误

有没有办法避免这种情况?我需要进入我资源的设计器中,将构造函数公开以解决问题

我在xaml文件中这样使用我的资源


这样做的原因是您不应该自己实例化该类。您应该始终使用
ConsoleApplication1.Resource1.ResourceManager
,它本身为您实例化了类


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

您可以创建一个公共类,通过属性公开资源:

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构造函数可以是内部的

另一种不改变代码的方法如下。对我来说效果很好


嗯,我所做的是在每个Silverlight项目的预构建事件中添加一个命令行实用程序,用
public
替换每个
内部
字符串
:)

您可以通过以下方式编辑生成前和生成后事件:右键单击项目->
属性
->
生成事件

我使用了一个名为的实用程序,它是免费的,可以使用
RegEx
正则表达式替换选定文件中的字符串

下面是我正在使用的命令行:

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

请注意,我的所有资源都位于每个项目的资源目录下,命令行实用程序位于
\ThirdParty\rxfind
目录下我为编辑的每个文件创建了一个宏来执行此操作。我仍然要记得运行它,但它要快得多。请看。

我也有同样的错误。为了解决这个问题,我刚刚创建了一个
公共类
,它继承了表示资源文件的类,知道它也必须是公共类这是我的exep:

public class TrackResourceWrapper : TrackResource
{
}
与:
TrackResourceWrapper
正在继承类
TrackResource
是位于代码资源文件后面的类(公共类)

简单地说:

  • 添加从资源类继承的新类
  • 在App.xaml文件中,修改您创建的资源类

  • 完成了

    你能给我一个绑定的例子吗?你提到的ResourceManager没有公开字符串变量,所以它不能绑定。您必须使用GetX方法从中获取任何值。我也遇到了同样的问题,这很烦人……我在WPF中做过,应该也适用于Silverlight。这是最好的答案。安装exe并将资源文件的自定义工具属性设置为“PublicResourceCodeGenerator”。