除了标题标题之外的UIElements

时间:2009-05-29 19:31:47

标签: wpf datatemplate tabcontrol uielement

有没有办法在UIElement s'标题的右侧放置一些内容(自定义TabItem),以便标题会考虑其大小。

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

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

1 个答案:

答案 0 :(得分:2)

没有一种简单的方法可以在该位置放置内容,但有一种方法。为此,您必须覆盖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

祝你好运!