XAML中静态类的别名

本文关键字:别名 静态类 XAML | 更新日期: 2023-09-27 18:29:22

对于本地化,我每个XAML文件有一个resx文件。它们位于相同的目录和命名空间中。resx名称对应于XAML名称,并附加单词Resources

我访问这样的资源:

<TextBlock Text="{x:Static r:MainWindowResources.SomeText}"/>

由于我觉得这很长(甚至还有更长的类名),我想知道是否有什么方法可以定义MainWindowResources的别名。在C#中,我可以使用using指令来实现这一点。

如果生成的资源文件包装器不是一个具有静态属性的类,那么会容易得多。一个可能的解决方案是使用从DynamicObject继承的包装器实例。你可以给它传递一个类型,并通过它访问该类型的静态成员。然后你可以在XAML中添加一个该包装的实例作为资源。

但我会失去IntelliSense的支持,而且它可能在性能方面也不太好。

另一个解决方案是使用WPF本地化扩展,但我也会失去对IntelliSense的支持。另外,我很好奇是否有其他方法可以创建静态类的别名。:)

XAML中静态类的别名

不,在Xaml中没有办法像在C#中使用using那样简单地对类名进行别名。

使用短名称的自定义标记扩展可能是最好的选择,但正如您所说,您将失去编辑器完成支持。如果你真的很绝望,你可以写一个T4模板,为你的资源文件中的每个字符串生成一个值为一个的枚举,然后你可以使用一个枚举值作为你的标记扩展参数,并支持补全(例如,{l:MainWindowString SomeText}),但这似乎需要做很多工作来缩短一些Xaml属性,它们不会短得多。

我会坚持你所拥有的。