【问题标题】:WPF Custom Control based on TabItem and Themes基于 TabItem 和 Themes 的 WPF 自定义控件
【发布时间】:2010-06-26 07:09:58
【问题描述】:

我创建了一个 Generic.xaml 主题,它为所有常用控件设置样式,包括 TabItem 这对应用程序中的所有控件都适用

当我创建一个 TabItem 控件并显示它时,它会获得主题 OK。

TabItem t = new TabItem();
 t.Header = "Normal";
 MainContentControl.Items.Add(t);

但是当我基于 TabItem 创建自定义控件时

 public partial class ClosableTab : TabItem

显示出来

ProActive.LocalControls.ClosableTab ct = new ProActive.LocalControls.ClosableTab();
  ct.Header = "COMP";
  MainContentControl.Items.Add(ct);

主题被忽略。

我已经尝试过使用

来重写它的默认样式
 DefaultStyleKeyProperty.OverrideMetadata(typeof(ClosableTab), new FrameworkPropertyMetadata(typeof(TabItem)));

如果我的自定义控件是基于 TabItem 的,为什么主题不也适用于它?

【问题讨论】:

    标签: wpf controls


    【解决方案1】:

    DefaultStyleKey 仅用于查找主题样式。必须在定义控件的程序集中或根据控件程序集中指定的ResourceDictionaryLocation 在相关程序集中定义主题样式。 TabItem 主题位于 PresentationFramework.Aero 中,WPF 将在您的程序集中查找 ClosableTab 主题,因此即使它们具有相同的键也不会找到它们。 Here 很好地描述了 WPF 如何查找主题样式。

    将始终使用控件的实际类型查找隐式样式,因此如果您的资源字典中有<Style TargetType="TabItem">,那么它不会影响ClosableTab

    让 ClosableTab 从 TabItem 继承隐式样式的最简单方法是为 ClosableTab 创建一个隐式样式并使用BasedOn

    <Style TargetType="local:ClosableTab" BasedOn="{StaticResource {x:Type TabItem}}" />
    

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多