¿Por qué mi control personalizado TabItem no aparece en TabControl?
-
22-07-2019 - |
Pregunta
Hice un control personalizado llamado SmartTabItem , actualmente solo la implementación predeterminada:
using System.Windows;
using System.Windows.Controls;
namespace TestControl.Controls
{
public class SmartTabItem : TabItem
{
static SmartTabItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(SmartTabItem)));
}
}
}
Lo incluyo en mi TabControl de esta manera:
<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>
Pero solo pestañas " Dos " y "Tres" son mostrados. ¿Por qué el SmartTabItem no aparece en TabControl si hereda de TabItem?
Solución
Para usar el estilo predeterminado para un TabItem
en su SmartTabItem
, modifique el código de esta manera:
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(TabItem)));
Esto le indicará al sistema wpf que use el estilo predeterminado de TabItem
para sus elementos de pestaña. De lo contrario, su elemento de pestaña es realmente inútil.
Otros consejos
Supongo que ha anulado su estilo predeterminado, pero no le ha proporcionado un estilo en Generic.xaml. Intente comentar esta línea para probar:
DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(SmartTabItem)));