Подтвердить что ты не робот

Скрыть заголовок TabControl

Какой программный способ (т.е. не использовать стили как этот вопрос, но с использованием кода), чтобы скрыть заголовок TabControl? Я буду рад за фрагмент.

4b9b3361

Ответ 1

Style s = new Style();
s.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));
tabControl.ItemContainerStyle = s;

Ответ 2

На самом деле, это очень прямо, чтобы скрыть полосу вкладок. Вы просто установите для каждого TabItem Visibility значение Collapsed. Вы по-прежнему видите содержимое вкладки... просто не заголовок вкладки.

Ответ 3

Ну, есть несколько способов сделать это.

Самый уродливый способ: использовать VisualTreeHelper для поиска TabPanel (или любой другой панели, которую вы используете для размещения элементов), и установить для нее свойство Visibility для Visibility.Collapsed. Почему некрасиво? Легко создать несколько раздражающих ошибок здесь или разбить этот подход с обновлением стиля "безвредный", если вы не были достаточно осторожны...

Я предпочитаю использовать комбинацию Xaml и кода. Вы привязываете визуализацию TabItem для просмотра свойства модели или видимости TabPanel для просмотра свойства модели. В обоих случаях вы должны переопределить стиль (стиль ItemContainer или весь стиль TabControl). В обоих случаях у вас есть модель просмотра. Теперь, чтобы переключить видимость заголовка вкладки, вы просто обновляете свойство в модели представления. Вот пример с TabItems:

XAML

<Window x:Class="WpfApplication5.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication5"
        Title="Tab Settings"
        Height="300"
        Width="300">
  <Window.Resources>
    <local:TabControlViewModel x:Key="tabVM" />
    <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
  </Window.Resources>
  <Grid>
    <TabControl DataContext="{StaticResource tabVM}">
      <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
          <Setter Property="Visibility"
                  Value="{Binding TabHeaderVisible, Converter={StaticResource booleanToVisibilityConverter}}" />
        </Style>
      </TabControl.ItemContainerStyle>
      <TabItem Header="Tab 1">
        <StackPanel>
          <TextBlock Text="Content" />
          <Button Content="Toggle Header"
                  Click="ToggleHeaderClick" />
        </StackPanel>
      </TabItem>
      <TabItem Header="Tab 2 Header">
        <TextBlock Text="Tab 2 Content" />
      </TabItem>
    </TabControl>
  </Grid>
</Window>

С#

using System.ComponentModel;
using System.Windows;
using System.Windows.Input;

namespace WpfApplication5
{
  public partial class Window1 : Window
  {
    public Window1()
    {
      InitializeComponent();
    }

    private void ToggleHeaderClick(object sender, RoutedEventArgs e)
    {
      var tabControlVM =
        ((FrameworkElement)sender).DataContext as TabControlViewModel;
      if (tabControlVM != null)
      {
        tabControlVM.TabHeaderVisible = !tabControlVM.TabHeaderVisible;
      }
    }
  }

  public class TabControlViewModel : INotifyPropertyChanged
  {
    private bool _tabHeaderVisible = true;

    public ICommand ToggleHeader
    {
      get; private set;
    }

    public bool TabHeaderVisible
    {
      get { return _tabHeaderVisible; }
      set
      {
        _tabHeaderVisible = value;
        OnPropertyChanged("TabHeaderVisible");
      }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string name)
    {
      var changed = PropertyChanged;
      if (changed != null)
      {
        changed(this, new PropertyChangedEventArgs(name));
      }
    }
  }
}

Ответ 4

Простой стиль XAML

<TabControl>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Visibility" Value="Collapsed"/>
        </Style>
    </TabControl.ItemContainerStyle>
    ...
</TabControl>

Ответ 5

Я пробовал это в некотором коде, где я заполняю элементы вкладки вручную...

tabItemToAdd.Visibility = Visibility.Collapsed;

... но потом произошла странная вещь, когда во второй раз я очищал элементы управления вкладками, снова создавал элемент вкладки и использовал этот подход перед добавлением его в элемент управления вкладками, весь элемент вкладки и его содержимое были ушел, а не только заголовок вкладки. Так что у меня был успех с программным эквивалентом этого решения:

tabItemToAdd.Template = new ControlTemplate();

Ответ 6

private void TabItemControl_MouseEnter(object sender, MouseEventArgs e)
{
    if (this.TabItemControl.IsSelected == false)
    {
        this.TabItemControl.Opacity = 100;
    }
}

private void TabItemControl_MouseLeave(object sender, MouseEventArgs e)
{
    if (this.TabItemControl.IsSelected == false)
    {
        this.TabItemControl.Opacity = 0;
    }
}

private void TabAllControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (this.TabItemControl.IsSelected == false)
    {
        this.TabItemControl.Opacity = 0;
    }
}