2010-01-12 139 views
1

这是我的“示例代码”,包括我正在尝试做的事情。显然,目前它不工作,但有什么办法可以使它工作?如何从WPF中的其他字符串资源构建字符串资源?

<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> 
+0

您可以使用xaml中的字符串格式来实现相同的目标吗?http://blogs.msdn.com/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx – 2010-01-12 22:42:01

回答

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所得”等,并有一个明显的ProvideValue()方法。

请注意,正如Aran指出的,使用StringFormatterBinding是获得相同效果的更常见方法,并且通常是更好的设计。权衡是不允许将结果用作ResourceDictionary的一部分。

+0

优秀 - 我在搜索中没有遇到过这些概念。谢谢! – Ant 2010-01-13 09:07:53