绑定到静态类属性和StringFormat
本文关键字:StringFormat 属性 静态类 绑定 | 更新日期: 2023-09-27 18:17:00
我能够将静态类属性绑定到MenuItem标头,但我无法确定如何包含StringFormat以便在属性之外显示硬编码文本。
这可能吗?
当前:(显示"SQLSERVER1")
Header="{x:Static settings:Settings.CurrentServer}"
Desired: (Display "Connection: SQLSERVER1")
Header="{Binding Source={x:Static Settings:Settings.CurrentServer},StringFormat='Connection: {0}'}"
当我在XAML中尝试'Desired'行时,StringFormat完全被忽略。我做错了什么?
在。net 5中,以下工作对我来说是可行的:
<Window Title="{Binding Source={x:Static vm:ApplicationSettings.ProductName}, StringFormat='{}{0} Document'}" />
其中ProductName
定义为:
public static string ProductName {get { ... ; } }
MenuItem
提供了一个您应该使用的HeaderStringFormat
属性:
<MenuItem Header="{Binding Source={x:Static Settings:Settings.CurrentServer}}"
HeaderStringFormat="Connection: {0}" />
实际上,该属性是HeaderedItemsControl
的一部分,MenuItem
碰巧扩展了它。
忽略StringFormat
属性
我遇到了类似的问题,并通过使用ContentControl
和它的单独的ContentStringFormat
属性来解决它:
<TextBlock Cursor="Help" Text="Hello World" >
<TextBlock.ToolTip>
<ContentControl Content="{Binding Path=SomeProperty, Source={x:Static local:SomeStaticClass}}" ContentStringFormat="Hello {0}" />
</TextBlock.ToolTip>
</TextBlock>
对于Content和Header, StringFormat被忽略,因为它们的TargetType不是System.String。这些属性有相应的*StringFormat属性来绕过这个限制。