StringFormat问题

4

我正在尝试使用XAML中的StringFormat来填充TabItem的Header文本。 我正在使用的代码是:

<TabControl.ItemContainerStyle>
    <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource TabItemStyle}">
        <Setter Property="Header" Value="{Binding MyValue, StringFormat='My Value is {0}'}" />
        <EventSetter Event="FrameworkElement.Loaded" Handler="OnTabItemLoaded" />
        <EventSetter Event="FrameworkElement.Unloaded" Handler="OnTabItemUnloaded" />
    </Style>
</TabControl.ItemContainerStyle>

问题是我的页眉只显示了 MyValue 的值,没有格式化的文本。

你应该考虑将HeaderStringFormat的答案设置为正确答案。这是一个15秒钟的修复,而不是一个15分钟的修复。 - Jamie
2个回答

5
因为Header属性不是字符串属性。
您需要使用一个包含TextBlock的HeaderTemplate,您可以使用您的stringformat绑定Text属性。
<TabControl.ItemContainerStyle> 
    <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource TabItemStyle}"> 
        <Setter Property="HeaderTemplate">
          <Setter.Value>
            <DataTemplate>
              <TextBlock Text="{Binding MyValue, StringFormat='My Value is {0}'}" /> 
            </DataTemplate>
          </Setter.Value>
        </Setter>
        <EventSetter Event="FrameworkElement.Loaded" Handler="OnTabItemLoaded" /> 
        <EventSetter Event="FrameworkElement.Unloaded" Handler="OnTabItemUnloaded" /> 
    </Style> 
</TabControl.ItemContainerStyle>

我不得不将ControlTemplate更改为DataTemplate,但这正是我想要的。 - lumberjack4
我认为现在你可以简单地使用HeaderStringFormat,可以看看我的下面的回答。 - Eduardo Hernández

1
最简单的解决方案是使用HeaderStringFormat属性:
<Setter Property="Header" Value="{Binding MyValue}" />
<Setter Property="HeaderStringFormat" Value="My Value is {0}" />

每当您可以将字符串分配给通用内容属性时,WPF似乎遵循此模式,另一个示例是{{link1:ContentControl.ContentStringFormat}}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接