如何从WPF中的其他字符串资源构建字符串资源?

时间:2010-01-12 12:28:27

标签: wpf resources

这是我的'示例代码',包括我正在尝试做的事情。显然,它现在不起作用,但有什么方法可以让它起作用吗?

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:System="clr-namespace:System;assembly=mscorlib"
    >
    <System:String x:Key="ProductName">Foo</System:String>
    <System:String x:Key="WindowTitle">{ProductName} + Main Window</System:String>
</ResourceDictionary>

1 个答案:

答案 0 :(得分:2)

以这种方式将计算字符串添加到ResourceDictionary的唯一方法是创建MarkupExtension。您的MarkupExtension将像这样使用:

<ResourceDictionary ...>
  <sys:String x:Key="ProductName">Foo</sys:String>
  <local:MyStringFormatter
    x:Key="WindowTitle"
    StringFormat="{0} Main Window"
    Arg1="{StaticResource ProductName}" />
</ResourceDictionary>

这假设您在名为MarkupExtension的“本地”命名空间中创建了一个MyStringFormatterExtension子类,其名称为“StringFormat”,“Arg1”,“Arg2”等,并且具有{{ 1}}做明显的方法。

请注意,正如Aran指出的那样,使用ProvideValue()的{​​{1}}将是实现相同效果的更常见方式,通常是更好的设计。权衡是它不允许将结果用作Binding的一部分。