绑定到Static类属性和StringFormat

时间:2015-10-08 18:59:34

标签: c# wpf xaml user-interface data-binding

我能够将静态类属性绑定到MenuItem标头,但我无法确定如何包含StringFormat,以便除了属性之外我还可以显示硬编码文本。

这可能吗?

目前:(显示“SQLSERVER1”)

Header="{x:Static settings:Settings.CurrentServer}"

所需:(显示“连接:SQLSERVER1”)

Header="{Binding Source={x:Static Settings:Settings.CurrentServer},StringFormat='Connection: {0}'}"

当我在XAML中尝试'Desired'行时,StringFormat将被完全忽略。我做错了什么?

4 个答案:

答案 0 :(得分:3)

MenuItem提供了您应该使用的HeaderStringFormat属性:

<MenuItem Header="{Binding Source={x:Static Settings:Settings.CurrentServer}}"
          HeaderStringFormat="Connection: {0}" />

实际上,该属性是HeaderedItemsControl的一部分,MenuItem恰好延伸。

StringFormat属性被忽略。

答案 1 :(得分:1)

我遇到了类似的问题并利用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>

答案 2 :(得分:1)

从 .NET 5 开始,以下对我有用:

class FormAddProduct:
    def _init_widgets(self):
        ...
    self.mlb = MultiListbox(self.frame1, (
        ('Product Name', 3), ('Amount $', 1)), callback=self.do_something)

其中 <Window Title="{Binding Source={x:Static vm:ApplicationSettings.ProductName}, StringFormat='{}{0} Document'}" /> 定义为:

ProductName

答案 3 :(得分:-1)

对于Content和Header,会忽略StringFormat,因为它们的TargetType不是System.String。这些属性具有相应的* StringFormat属性来绕过该限制。