Как использовать оставшееся пространство в строке элементов вкладки wpf - PullRequest
0 голосов
/ 07 августа 2010

Верхняя часть TabControl состоит из элементов управления TabItem.Есть ли способ повторно использовать оставшееся место для размещения содержимого WPF?

Я думаю, что я мог бы использовать «поддельный» TabItem с другим стилем и поместить свои вещи в TabItem.Header, но я надеялся, что есть лучший способ.

Решение

Основываясь на ответе ниже, я получил желаемое поведение, обернув TabPanel в шаблон ниже, например, в StackPanel и добавив мой дополнительный контент после него.

<StackPanel Orientation="Horizontal">
   <TabPanel 
    Grid.Row="0"
    Panel.ZIndex="1" 
    Margin="0,0,4,-1" 
    IsItemsHost="True"
    Background="Transparent" />
    <TextBlock>Foo</TextBlock>
</StackPanel>

Ответы [ 2 ]

1 голос
/ 07 августа 2010

Вы можете использовать шаблон и заставлять его делать все, что вы хотите, в этом сила WPF. Здесь - хорошая статья о настройке TabControl и элементов управления TabItem.

<Style  TargetType="{x:Type TabControl}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TabControl}">
        <Grid>
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <TabPanel 
             Grid.Row="0"
             Panel.ZIndex="1" 
             Margin="0,0,4,-1" 
             IsItemsHost="True"
             Background="Transparent" />
          <Border 
             Grid.Row="1"
             BorderBrush="Black" 
             BorderThickness="1" 
             CornerRadius="0, 12, 12, 12" >
            <Border.Background>
              <LinearGradientBrush>
                <GradientStop Color="LightBlue" Offset="0" />
                <GradientStop Color="White" Offset="1" />
              </LinearGradientBrush>
            </Border.Background>
            <ContentPresenter ContentSource="SelectedContent" />
          </Border>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

allвам нужно добавить свой контент в шаблон, часть, содержащая элементы вкладки, это <TabControl>

0 голосов
/ 19 февраля 2016

Я попробовал другой способ, который заключался в создании другой сетки, занимающей то же пространство, что и TabControl, то есть оба в Grid.Row = 0 Я связал высоту сетки с высотой первой вкладки, поэтому, если вкладки изменят высоту, остальные элементы управления останутся центрированными. Я установил MinWidth в окне, чтобы элементы управления не перекрывали вкладки.

Вставьте этот код в новое окно WPF ...

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="MainWindow" Height="306" Width="490" MinWidth="300">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TabControl Grid.Row="0" x:Name="tabControl">
        <TabItem x:Name="tabItem" Header="TabItem" Height="50">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="TabItem">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
    </TabControl>

    <Grid Grid.Row="0" Height="{Binding ActualHeight, ElementName=tabItem}" 
           VerticalAlignment="Top" Margin="0,2,0,0">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" 
                    VerticalAlignment="Center" Margin="20,0">
            <TextBlock VerticalAlignment="Center" Margin="10,0" FontSize="16" 
                       Foreground="Red" FontFamily="Calibri">My Text</TextBlock>
            <Button Content="My Button" />
        </StackPanel>
    </Grid>

  </Grid>
</Window>

... и вы получите это:

Adding controls in empty space next to tabcontrol tabs

...