【问题标题】:Alias to static class in XAMLXAML 中静态类的别名
【发布时间】:2014-11-06 17:36:32
【问题描述】:

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

我像这样访问资源:

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

因为我发现这很长(而且还有更长的类名),所以我想知道是否有某种方法可以定义 MainWindowResources 的别名。在 C# 中,我可以使用 using 指令来做到这一点。

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

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

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

【问题讨论】:

    标签: c# .net wpf xaml localization


    【解决方案1】:

    不,没有办法像在 C# 中使用 using 那样简单地在 Xaml 中为类名命名。

    具有短名称的自定义标记扩展可能是您能做的最好的事情,但正如您所说,您将失去对编辑器完成的支持。如果你真的很绝望,你可以编写一个 T4 模板,它会为资源文件中的每个字符串生成一个带有一个值的枚举,然后你可以使用一个枚举值作为具有完成支持的标记扩展参数(例如,@987654323 @),但这似乎只是为了缩短一些 Xaml 属性需要做很多工作,而且它们不会那么短得多。

    我会坚持你所拥有的。

    猜你喜欢
    • 2015-11-04
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多