Por que meu controle personalizado TabItem não aparecendo na TabControl
-
22-07-2019 - |
Pergunta
Eu fiz um controle personalizado chamado SmartTabItem , atualmente apenas a implementação padrão:
using System.Windows;
using System.Windows.Controls;
namespace TestControl.Controls
{
public class SmartTabItem : TabItem
{
static SmartTabItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(SmartTabItem)));
}
}
}
Eu incluí-lo na minha TabControl como este:
<Window x:Class="TestControl.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:TestControl.Controls"
Title="Window1" Height="300" Width="300">
<DockPanel Margin="10">
<TabControl>
<controls:SmartTabItem Header="One">content of one</controls:SmartTabItem>
<TabItem Header="Two">content of two</TabItem>
<TabItem Header="Three">content of three</TabItem>
</TabControl>
</DockPanel>
</Window>
Mas apenas guias "Dois" e "Three" são exibidos. Por que a SmartTabItem não está aparecendo na TabControl se herda de TabItem?
Solução
Para usar o estilo padrão para um TabItem
em seu SmartTabItem
, modificar o código como este:
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(TabItem)));
Isto irá dizer ao sistema WPF para usar o estilo padrão do TabItem
para seus itens de tabulação. Caso contrário, o item guia é verdadeiramente lookless.
Outras dicas
Eu estou supondo porque você substituído seu estilo padrão, mas não forneceram um estilo para ele em generic.xaml. Tente comentar esta linha para teste:
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(SmartTabItem)));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow