StringFormat问题

时间:2011-09-14 00:11:29

标签: wpf xaml string-formatting

我正在尝试在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的值,而不是格式化文本。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

最简单的解决方案是使用HeaderStringFormat属性:

<Setter Property="Header" Value="{Binding MyValue}" />
<Setter Property="HeaderStringFormat" Value="My Value is {0}" />

只要您可以将字符串分配给常规内容属性,WPF就会遵循这种模式,另一个示例是ContentControl.ContentStringFormat