Cuál es la forma programática (es decir, no utilizando estilos como en this question, pero utilizando el código) para ocultar la cabecera TabControl
? Estaré contento por un fragmento.Ocultar el encabezado TabControl
Respuesta
Style s = new Style();
s.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));
tabControl.ItemContainerStyle = s;
Bueno, hay varias formas de hacerlo.
La manera más fea: utilice VisualTreeHelper para encontrar TabPanel (o cualquier otro panel que utilice para alojar elementos) y establezca su propiedad de visibilidad en Visibility.Collapsed. ¿Por qué feo? Es fácil crear algunos errores molestos aquí o romper este enfoque con la actualización de estilo "inofensivo" si no fue lo suficientemente cuidadoso ...
Prefiero usar la combinación de Xaml y el código detrás. Vincula la visibilidad de TabItem para ver la propiedad del modelo o la visibilidad de TabPanel para ver la propiedad del modelo. En ambos casos, debe anular el estilo (ya sea el estilo de ItemContainer o el estilo de TabControl completo). En ambos casos, tiene el modelo de vista. Ahora, para alternar la visibilidad del encabezado de tabulación, solo actualiza una propiedad en el modelo de vista. He aquí un ejemplo con 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>
C#
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));
}
}
}
}
En realidad, es muy sencillo para ocultar la barra de pestañas. Usted acaba de configurar cada TabItem
s Visibility
a Collapsed
. Todavía ve el contenido de la pestaña, ... simplemente no el encabezado de la pestaña en sí.
Esto funcionó perfectamente para mi proyecto. – jlafay
Mía también, ¿sabes por qué tiene este comportamiento? Esperábamos que el contenedor de pestañas desapareciera por completo. – Purplegoldfish
Esto funcionó para mí también, gracias. También terminé creando un BooleanToVisibilityCollapsedConverter para poder enlazar datos de esta propiedad a mi view-model. –
C#
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; }}
Proporcione algunos antecedentes sobre por qué esta es la respuesta – JonE
simple XAML Estilo
<TabControl>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</TabControl.ItemContainerStyle>
...
</TabControl>
He intentado esto en algún código en el que pueblan los elementos de la ficha manualmente ...
tabItemToAdd.Visibility = Visibility.Collapsed;
. ... pero luego tuve una cosa extraña que sucedió donde la segunda vez borré la pestaña controle los elementos, cree el elemento de la pestaña de nuevo y utilice este enfoque antes de agregarlo al control de pestañas, el elemento de la pestaña completa y sus contenidos se han ido, no solo el encabezado de la pestaña. Así que he tenido éxito con el equivalente programático de this solution:
tabItemToAdd.Template = new ControlTemplate();
- 1. Cómo ocultar el encabezado de PivotItem?
- 2. Ocultar cuadrícula ExtJS Columna encabezado
- 3. WinForms Ocultando TabControl Encabezados
- 4. WPF: TabControl & DataTemplates
- 5. tabcontrol ownerdraw cambia el estilo de borde del tabcontrol
- 6. ¿Cómo puedo ocultar el encabezado de una lista WPF?
- 7. Activar el tabulador de TabControl
- 8. WPF TabControl y DataTemplates
- 9. cómo cambiar el nombre de tabcontrol
- 10. ¿Cómo reordenar fácilmente TabControl?
- 11. WPF tabcontrol styling
- 12. WPF TabControl Databinding
- 13. Silverlight TabControl ContentTemplate
- 14. C# TabControl TabPage Cambio
- 15. Menú contextual de TabControl
- 16. WPF TabControl personalizado
- 17. Ocultando y mostrando TabPages en tabControl
- 18. Cómo cambiar la pestaña seleccionada en el botón hacer clic en WPF TabControl con botones en el encabezado
- 19. TabControl Cancelar cambio de pestañas
- 20. Reordenar pestañas en WPF TabControl
- 21. Iconos en TabControl C# - ¿Cómo?
- 22. Ocultar los botones de paginación en el encabezado de la tabla de p: dataTable
- 23. Cómo ocultar el encabezado de la columna en un DataGrid WPF?
- 24. Pestañas en el lado derecho e izquierdo de TabControl C#
- 25. Seleccionar página de pestaña en TabControl sin robar el foco
- 26. WPF ComboBox SelectedItem establecido en nulo en el conmutador TabControl
- 27. TabItems de TabControl que comparten el mismo contenido ... No querer
- 28. Ocultar el UIKeyboard
- 29. Desactivar accesos directos predeterminados en un TabControl
- 30. WPF multilínea TabControl sin reorganizar filas
Wow. ¡Esperaba una línea como 'tab.Header.Visible = false' no a un gigantesco código XML + detrás de monstruo! –
Esto muestra la forma apropiada de lograr esto dentro del patrón de diseño de MVVM. Si bien esto no es lo que la pregunta solicitó, sigue siendo útil para quienes aplican el patrón en todo su código. – Charlie
es útil si usted es estrictamente MVVM, pero en algunos proyectos que necesariamente usan elementos generados por la base de datos como un POS, esto no es realista de aplicar, especialmente porque hay poco o ningún XAML. Sin embargo, ¿hay algún consejo para proyectos como ese para mantener el código más limpio? – ThrowingDwarf