这是我的'示例代码',包括我正在尝试做的事情。显然,它现在不起作用,但有什么方法可以让它起作用吗?
<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 :(得分: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
的一部分。