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