代码之家  ›  专栏  ›  技术社区  ›  bohdan_trotsenko

ui选项卡标题旁边的元素

  •  1
  • bohdan_trotsenko  · 技术社区  · 17 年前

    有办法放置东西吗 UIElement )在…的右边 TabItem s的头,以便头可以考虑其大小。

    我觉得他们应该有一个数据模板,但我不知道该读什么,也不知道该如何查询谷歌。

    alt text http://trotsenko.com.ua/files/sample.png

    1 回复  |  直到 13 年前
        1
  •  2
  •   Dave Clemmer manu    13 年前

    在那个位置放置内容不是一种简单的方法,但有一种方法。要做到这一点,您必须重写默认值。 ControlTemplate 对于 TabControl .

    大多数系统主题 TabPanel (选项卡所在的位置)和选项卡内容 Grid 像这样:

    <ControlTemplate TargetType="{x:Type TabControl}">
                        <Grid KeyboardNavigation.TabNavigation="Local"
                              SnapsToDevicePixels="true"
                              ClipToBounds="true">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition x:Name="ColumnDefinition0"/>
                                <ColumnDefinition x:Name="ColumnDefinition1"
                                                  Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition x:Name="RowDefinition0"
                                               Height="Auto"/>
                                <RowDefinition x:Name="RowDefinition1"
                                               Height="*"/>
                            </Grid.RowDefinitions>
                            <TabPanel x:Name="HeaderPanel"
                                      Panel.ZIndex ="1" 
                                      KeyboardNavigation.TabIndex="1"
                                      Grid.Column="0"
                                      Grid.Row="0"
                                      Margin="2,2,2,0"
                                      IsItemsHost="true"/>
    
                            <Border x:Name="ContentPanel"
                                    BorderThickness="0,0,1,1"
                                    BorderBrush="#D0CEBF"
                                    KeyboardNavigation.TabNavigation="Local"
                                    KeyboardNavigation.DirectionalNavigation="Contained"
                                    KeyboardNavigation.TabIndex="2"
                                    Grid.Column="0" Grid.ColumnSpan="2"
                                    Grid.Row="1">
    ...
    
    ...
    
    ...
                            </Border>
                        </Grid>
    ...
                    </ControlTemplate>
    

    所以你 能够 向网格中添加另一个ContentControl并将其绑定到自定义附加属性。请记住,默认的ControlTemplates也有许多触发器来控制溢出处理,除其他之外,您还必须确保您的附加UI元素不会干扰这一点。

    但是,如果不需要处理tabControl方向或溢出,您应该能够很快获得类似的结果:

    Three TabItems with a Red Border and TextBlock http://img35.imageshack.us/img35/3237/tabpanelexample.png

    祝你好运!