Laden...

TabItem ohne Header

Erstellt von perlfred vor einem Jahr Letzter Beitrag vor einem Jahr 380 Views
P
perlfred Themenstarter:in
257 Beiträge seit 2010
vor einem Jahr
TabItem ohne Header

Hallo!

Mal etwas einfaches ...

Ich möchte die TabItem's eines TabControl "fernsteuern". Sowohl in dem kurzem Demo als auch in der Anwendung steuere ich den Zugriff über die SelectedIndex-Eigenschaft des TabControl. Absolut trivial.


<Window x:Class="WpfApp1.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"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d" WindowStartupLocation="CenterScreen"
        Title="MainWindow" Height="300" Width="150">
    <Border Padding="20">
        <StackPanel>
            <ListBox x:Name="MyCB" SelectedIndex="0" VerticalAlignment="Top">
                <ListBoxItem Content="A"/>
                <ListBoxItem Content="B"/>
                <ListBoxItem Content="C"/>
            </ListBox>
            <TabControl Margin="0,30,0,0" VerticalAlignment="Top" 
                    SelectedIndex="{Binding ElementName=MyCB, Path=SelectedIndex}">
                <TabControl.Resources>
                    <Style TargetType="{x:Type TabItem}">
                        <Setter Property="Padding" Value="0"/>
                        <Setter Property="Margin" Value="0"/>
                        <Setter Property="BorderThickness" Value="0"/>
                        <Setter Property="BorderBrush" Value="Transparent"/>
                    </Style>
                </TabControl.Resources>

                <TabItem FontSize="72">
                    <Label Content="A" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </TabItem>
                <TabItem FontSize="72">
                    <Label Content="B" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </TabItem>
                <TabItem FontSize="72">
                    <Label Content="C" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </TabItem>
            </TabControl>
        </StackPanel>
    </Border>
</Window>

Mein Problem besteht nun darin, dass ich die TabItem-Header komplett (!!!) ausblenden möchte (N i c h t den TabItem insgesamt, wie es viele Lösungen im Internet beschreiben). Dafür gibt es diverse Gründe ...

Obiger Style blendet mir nur die TabItem-Header der TabItem's aus, die nicht selektiert sind. Der selektierte TabItem-Header wird immer angezeigt (siehe Bild). Man sieht es "deutlich" an der Positionsänderung des selektierten TabItem-Header's.

Habt ihr dazu einen Lösungsansatz?

Viele Grüße Fred.

P
perlfred Themenstarter:in
257 Beiträge seit 2010
vor einem Jahr

Aus irgend einen Grund kann ich es nicht mehr bearbeiten ????

Ich habe es auch einmal mit einem HeaderTemplate versucht, da man an dieser Stelle auf das IsSelected-Event zugreifen kann, aber da das Problem garnicht am Inhalt des Headers liegt, ist das natürlich wirkungslos.


<Style TargetType="{x:Type TabItem}">
    <Setter Property="Padding" Value="0"/>
    <Setter Property="Margin" Value="0"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <FrameworkElement x:Name="dummy" Height="0"/>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TabItem}},Path=IsSelected}" Value="True">
                        <Setter TargetName="dummy" Property="Height" Value="0"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

P
perlfred Themenstarter:in
257 Beiträge seit 2010
vor einem Jahr

Hallo!

Ich habe es jetzt so gelöst, dass ich das ControlTemplate des TabItems geändert habe (im ContentPresenter das Margin komplett entfernt habe -> Ohne Inhalt des Headers wird dann auch Nichts mehr dargestellt).


<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TabItem">
                <Grid Name="Panel">
                    <ContentPresenter x:Name="ContentSite"
                    VerticalAlignment="Center" HorizontalAlignment="Center"
                    ContentSource="Header"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ergebnis wie gewünscht:

P
perlfred Themenstarter:in
257 Beiträge seit 2010
vor einem Jahr

Hallo Th69!

Danke für deinen Hinweis!

Aber das ist genau der falsche Ansatz! Da wird, wie ich es schon erwähnt hatte, das gesamte TabItem ausgeblendet, was ich genau verhindern möchte!

Trotzdem nochmals Danke für deine Antwort!

Fred.