我正在寻找一种方法来本地化PropertyGrid中显示的属性名称.可以使用DisplayNameAttribute属性"覆盖"属性的名称.不幸的是,属性不能有非常量表达式.所以我不能使用强类型资源,例如:
class Foo
{
[DisplayAttribute(Resources.MyPropertyNameLocalized)] // do not compile
string MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我浏览了一下,发现了一些从DisplayNameAttribute继承的建议,以便能够使用资源.我最终会得到如下代码:
class Foo
{
[MyLocalizedDisplayAttribute("MyPropertyNameLocalized")] // not strongly typed
string MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
但是我失去了强大的类型资源优势,这绝对不是一件好事.然后我遇到了DisplayNameResourceAttribute,这可能是我正在寻找的.但它应该在Microsoft.VisualStudio.Modeling.Design命名空间中,我找不到我应该为此命名空间添加的引用.
有人知道是否有更好的方法以一种好的方式实现DisplayName本地化?或者是否有使用Microsoft似乎用于Visual Studio的方法?
最初我的.xaml表单使用以下行来设置Designer的DataContext,其中视图模型是非泛型类型(注意我在谈论设计时DataContext而不是将在运行时使用的实际DataContext).
<Window ...
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{d:DesignInstance Dialogs:CustomerSearchDlogViewModel}"
...>
Run Code Online (Sandbox Code Playgroud)
现在我没有CustomerSearchDlogViewModel,而是有一个通用的SearchDialogViewModel,但我无法弄清楚<Window>标签中的哪种语法可以让我指定该视图模型.