UIElements в стороне заголовков вкладок - PullRequest
1 голос
/ 29 мая 2009

Существует ли способ разместить что-то (пользовательский UIElement) справа от заголовков TabItem s, чтобы заголовки учитывали его размер.

Я чувствую, что для них должен быть шаблон данных, но я не знаю, что читать или как запросить Google для этого.

альтернативный текст http://trotsenko.com.ua/files/sample.png

1 Ответ

2 голосов
/ 30 мая 2009

Нет простого способа разместить контент в этом месте, но есть способ. Для этого вам придется переопределить значение по умолчанию 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 также содержат множество триггеров, которые, помимо прочего, управляют обработкой переполнения, и вам нужно убедиться, что ваши дополнительные элементы пользовательского интерфейса не мешают этому.

Вы должны быть в состоянии получить что-то вроде этого довольно быстро, хотя, если вам не нужно иметь дело с ориентацией TabControl или переполнением:

Три TabItems с красной рамкой и TextBlock http://img35.imageshack.us/img35/3237/tabpanelexample.png

Удачи!

...