Как сделать область вкладок элемента управления вкладки WPF меньше, чем элемент управления? - PullRequest
3 голосов
/ 23 января 2011

У меня есть сценарий, где у меня есть две кнопки в правом верхнем углу моего приложения, и у меня есть элемент управления вкладкой, который охватывает весь экран приложения. (Обычно две кнопки находятся на одной горизонтальной линии с вкладками в элементе управления вкладками). Проблема в том, что когда у меня открыто несколько вкладок, кнопки и вкладки перекрываются. Я не хочу указывать номера строк / столбцов сетки, чтобы кнопки находились над вкладками.

Есть ли способ указать элементу управления вкладки определенную область, в которой он должен открывать элементы управления вкладками, прежде чем он автоматически запустит второй ряд вкладок?

Другими словами, если мой элемент управления вкладками имеет ширину X, как я могу указать области, которая отображает фактические вкладки, что она должна занимать, скажем, x-15 объем пространства.

Спасибо!

1 Ответ

5 голосов
/ 23 января 2011

Вы должны будете предоставить ControlTemplate для TabControl, чтобы сделать это. Вот пример, где 100 пикселей зарезервировано справа от панели заголовка:

<Grid>
    <TabControl>
        <TabControl.Template>
            <ControlTemplate TargetType="{x:Type TabControl}">
                <Grid KeyboardNavigation.TabNavigation="Local"
                      SnapsToDevicePixels="true"
                      ClipToBounds="true">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition x:Name="ColumnDefinition0"/>
                        <ColumnDefinition x:Name="ColumnDefinition1"
                                          Width="100"/>
                    </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"
                            Background="{TemplateBinding Background}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            KeyboardNavigation.TabNavigation="Local"
                            KeyboardNavigation.DirectionalNavigation="Contained"
                            KeyboardNavigation.TabIndex="2"
                            Grid.Column="0"
                            Grid.Row="1"
                            Grid.ColumnSpan="2">
                        <ContentPresenter x:Name="PART_SelectedContentHost"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                          Margin="{TemplateBinding Padding}"
                                          ContentSource="SelectedContent"/>
                    </Border>
                </Grid>
            </ControlTemplate>
        </TabControl.Template>
        <TabItem Header="Item1"/>
        <TabItem Header="Item2"/>
        <TabItem Header="Item3"/>
        <TabItem Header="Item4"/>
    </TabControl>
</Grid>

Измените размер окна, чтобы увидеть его в действии.

...