Пользовательский шаблон ControlTemplate для TabControl - PullRequest
0 голосов
/ 07 октября 2011

В настоящее время в одном из моих просмотров у меня есть следующие настройки TabControl:

    <TabControl ItemsSource="{Binding Workspaces}"
                ItemTemplate="{StaticResource WorkspaceTemplate}"
                IsSynchronizedWithCurrentItem="True" Background="{x:Null}">

Я бы хотел полностью изменить внешний вид TabControl, настроив свойство ControlTemplate. Я планирую сделать так, чтобы ни одна из других вкладок не была видна, и только содержимое текущей вкладки было видимым без следа TabControl, но позволяло бы пользователю Ctrl + Tab на другие вкладки.

Честно говоря, я понятия не имею, с чего начать. Я попытался добавить ContentPresenter в ControlTemplate TabControl, но не могу понять, как привязать его к активной в данный момент вкладке (обратите внимание, не на саму вкладку, а на содержимое TabItem).

Любая помощь или, возможно, какой-то шаблонный код, чтобы начать меня? Возможно, есть более подходящий элемент управления (даже если это означает, что мне придется потерять функциональность Ctrl + Tab).

1 Ответ

0 голосов
/ 11 октября 2011

Вы можете просто создать свой собственный шаблон ControlTemplate.

<ControlTemplate TargetType="{x:Type TabItem}">
<Grid>
    <Border 
            Name="Border"
            Margin="0,0,-4,0" 
            Background="LightGray"
            BorderBrush="Black" 
            BorderThickness="1,1,1,1"
            Visibility="Collapsed"
            CornerRadius="2,12,0,0" >
        <ContentPresenter x:Name="ContentSite"
              VerticalAlignment="Center"
              HorizontalAlignment="Center"
              ContentSource="Header"
              Margin="12,2,12,2"
              RecognizesAccessKey="True"/>
    </Border>
</Grid>
<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="Border" Property="Background" Value="Gray" />
        <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" />
        <Setter TargetName="Border" Property="Visibility" Value="Visible" />
    </Trigger>
</ControlTemplate.Triggers>

...