【问题标题】:WPF TabItem format dateWPF TabItem 格式日期
【发布时间】:2016-05-24 18:38:47
【问题描述】:

我正在尝试为 TabControl 创建一种样式以实现 2 个目标:

  1. 以不同的背景颜色和粗体显示选定的 TabItem。
  2. 将绑定到视图模型中日期的选项卡标题文本格式化为小时和分钟,例如“15:45”。

我几乎成功了,但标题文本也显示了日期部分。 此外,它显示的是 03:45 而不是 15:45。

see screenshot here

这是我正在使用的 XAML 代码:

    <TabControl ItemsSource="{Binding MC}" >
        <TabControl.Resources>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Background" Value="#01535F" />
                <Setter Property="Foreground" Value="Azure" />
                <Setter Property="FontSize" Value="16" />
                <Setter Property="BorderBrush" Value="Black" />
                <Setter Property="BorderThickness" Value="1" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TabItem">
                            <Border Name="Border" BorderThickness="1,1,1,0" BorderBrush="Black" Margin="1,1">
                                <Grid Name="Panel">
                                    <ContentPresenter x:Name="ContentSite"
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Center"
                                    ContentSource="Header"
                                    />
                                    <!--<HeaderedContentControl Header="{Binding Path=MarketStartTime, StringFormat={}{0:HH:mm}}" />-->
                                </Grid>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="FontWeight" Value="Bold" />
                                    <Setter TargetName="Panel" Property="Background" Value="#003F44" />
                                </Trigger>
                                <Trigger Property="IsSelected" Value="False">
                                    <Setter TargetName="Panel" Property="Background" Value="#01535F" />
                                </Trigger>
                                <Trigger Property="IsMouseOver" Value="true">
                                    <Setter Property="FontWeight" Value="Bold" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="HeaderTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <HeaderedContentControl Header="{Binding Path=MarketStartTime, StringFormat={}{0:HH:mm}}" />
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TabControl.Resources>
    </TabControl>

提前感谢您的帮助。

【问题讨论】:

  • "HH" 24 小时制格式字符串,所以您确定您的时间是 15:45 而不是 3:45?
  • 是的,我确定,我在提问的同时做了截图。按照接受的答案中的建议使用 ItemTemplate 解决了这个问题。谢谢。

标签: wpf mvvm string-formatting tabitem


【解决方案1】:

我想这就是你要找的东西:

<TabControl ItemsSource="{Binding MC}">
    <TabControl.Resources>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Background" Value="#01535F" />
            <Setter Property="Foreground" Value="Azure" />
            <Setter Property="FontSize" Value="16" />
            <Setter Property="BorderBrush" Value="Black" />
            <Setter Property="BorderThickness" Value="1" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TabItem">
                        <Border Name="Border" BorderThickness="1,1,1,0" BorderBrush="Black" Margin="1,1">
                            <Grid Name="Panel">
                                <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" />
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="FontWeight" Value="Bold" />
                                <Setter TargetName="Panel" Property="Background" Value="#003F44" />
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False">
                                <Setter TargetName="Panel" Property="Background" Value="#01535F" />
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="FontWeight" Value="Bold" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>

    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=MarketStartTime, StringFormat={}{0:HH:mm}}"></TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

ItemTemplate 用于标题区域,ContentTemplate 用于内容区域中显示的内容。 ContentTemplate 中的 ContentPresenter 将实例化来自 ItemTemplate 的控件。

【讨论】:

  • 我还有 2 个问题,我对用于标题内容的控件模板有点困惑。我想在选项卡标题中添加一个填充,以便文本不会太靠近边框,并为带有列表框的选项卡内容创建一个数据模板。我不明白将这些 2 更改的 XAML 代码放在哪里。
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2010-12-03
  • 2015-07-25
  • 2011-12-20
  • 2011-03-31
相关资源
最近更新 更多