4

我制作了一个名为SmartTabItem的自定义控件,目前只是默认实现:

using System.Windows;
using System.Windows.Controls;

namespace TestControl.Controls
{
    public class SmartTabItem : TabItem
    {
        static SmartTabItem()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(SmartTabItem)));
        }
    }
}

我将它包含在我的TabControl中,如下所示:

<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>

但只显示选项卡“二”和“三”。如果 SmartTabItem 从 TabItem 继承,为什么它不显示在 TabControl 中?

4

2 回答 2

5

要使用 a 的默认样式,TabItemSmartTabItem修改如下代码:

DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(TabItem)));

这将告诉 wpf 系统TabItem为您的选项卡项目使用 ' 的默认样式。否则,您的选项卡项目真的是无形的。

于 2009-08-04T12:04:58.453 回答
1

我猜是因为您已经覆盖了它的默认样式,但没有在 Generic.xaml 中为其提供样式。尝试注释掉这一行来测试:

DefaultStyleKeyProperty.OverrideMetadata(typeof(SmartTabItem), new FrameworkPropertyMetadata(typeof(SmartTabItem)));
于 2009-08-04T12:02:33.810 回答