首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改TabControl的标题

问修改TabControl的标题
EN

Stack Overflow用户
提问于 2013-03-18 13:33:22
回答 1查看 4.6K关注 0票数 3

因此,我在运行时将我的视图直接添加到TabControl的Items集合中(而不是在它们周围创建TabItems并将这些TabItems添加到TabControl中)。这些视图公开了一个名为HasChanges的属性(包装在同名的ViewModel属性周围),我希望将该属性绑定到TabItem的头部,以显示一个星号(*)来标识具有未保存更改的选项卡,就像VS所做的那样。我已经尝试过使用DataTemplates,但在访问DataTemplate中的视图对象时遇到问题。正确的方法是什么?下面是我的几个尝试之一:

代码语言:javascript
复制
<TabControl.ItemTemplate>
    <DataTemplate DataType="UserControl">
        <StackPanel Orientation="Horizontal" Margin="0" Height="22">
            <TextBlock VerticalAlignment="Center" Text="{Binding HeaderText, RelativeSource={RelativeSource AncestorType=UserControl}}" />
            <TextBlock Text="*" Visibility="{Binding HasChanges, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource B2VConverter}}" />
        </StackPanel>
    </DataTemplate>
</TabControl.ItemTemplate>

请注意,我正在为这两个TextBlock尝试两种不同的绑定方法,但都不起作用。我的视图继承自UserControl并公开属性HasChanges和HeaderText。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-19 14:33:53

好的。我自己解决的。对于任何其他试图实现类似VS的关闭按钮和未保存的更改星号的人,这里有一个模板:

代码语言:javascript
复制
<TabControl.ItemContainerStyle>
    <Style TargetType="{x:Type TabItem}">
        <Setter Property="HeaderTemplate" >
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="0" Height="22">
                        <TextBlock VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource AncestorType=TabItem}, Path=Content.HeaderText}" />
                        <TextBlock Text=" *" ToolTip="Has unsaved changes" Visibility="{Binding Content.DataContext.HasChanges, RelativeSource={RelativeSource AncestorType=TabItem}, Converter={StaticResource B2VConverter}}" />
                        <Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" Width="18" Height="18" 
                                Margin="6,0,0,0" Padding="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
                                Command="{Binding DataContext.TabClosingCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                                CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"
                                VerticalAlignment="Center" Focusable="False">
                            <Grid Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <Line StrokeThickness="3" StrokeStartLineCap="Round"  StrokeEndLineCap="Round" Stroke="Gray" X1="1" Y1="1" X2="9" Y2="9" HorizontalAlignment="Center" VerticalAlignment="Center" />
                                <Line StrokeThickness="3" StrokeStartLineCap="Round" StrokeEndLineCap="Round" Stroke="Gray" X1="1" Y1="9" X2="9" Y2="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Grid>
                        </Button>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</TabControl.ItemContainerStyle>

结果是一个优雅的基于绘图的按钮,具有扁平的外观。视图必须实现布尔型HasChanges和HeaderText属性,另外还需要在资源部分中定义一个名为BooleanToVisibilityConverter的B2VConverter。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15470341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档