绑定到静态类属性和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完全被忽略。我做错了什么?

绑定到静态类属性和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属性来绕过这个限制。