在扩展树视图时,我需要指定一个控件模板还是使用默认的控件模板

本文关键字:控件 一个 默认 视图 扩展 | 更新日期: 2023-09-27 18:27:38

开始制作自定义树视图,我想知道为什么我似乎无法将其显示出来。除了用MultiSelectTreeView替换树视图外,我没有更改我的xaml,但它没有显示。如果我扩展树视图,扩展类是否继承父类的默认控制模板?

public class MultiSelectTreeView:TreeView
  {
    #region Data Members
    private TreeViewItem LastItem = null;
    private ObservableCollection<TreeViewItem> SelectedTreeViewItemsList = new ObservableCollection<TreeViewItem>();
    public ObservableCollection<TreeViewItem> SelectedNodes
    {
      get
      {
        return SelectedTreeViewItemsList;
      }
      private set
      {
        SelectedTreeViewItemsList.Clear();
        SelectedTreeViewItemsList = value;
      }
    }
    public bool CtrlDown
    {
      get
      {
        return Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);
      }
    }
    public bool ShiftDown
    {
      get
      {
        return Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);
      }
    }
    #endregion Data Members

    #region Constructors
        /// <summary>
        /// Static Constructor defines the key used to find the default theme style for this control
        /// </summary>
        static MultiSelectTreeView()
        {
          DefaultStyleKeyProperty.OverrideMetadata(
                  typeof(MultiSelectTreeView), new FrameworkPropertyMetadata(typeof(MultiSelectTreeView)));
        }
        public MultiSelectTreeView()
        {
          this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(MultiSelectTreeView_SelectedItemChanged);
          this.Background = Brushes.Blue;
          this.Foreground = Brushes.Yellow;
        }

在扩展树视图时,我需要指定一个控件模板还是使用默认的控件模板

默认情况下,它将使用TreeView的默认样式,但您在静态构造函数中指定了不同的DefaultStyleKey

      DefaultStyleKeyProperty.OverrideMetadata(
              typeof(MultiSelectTreeView), new FrameworkPropertyMetadata(typeof(MultiSelectTreeView)));

如果执行此操作,还必须创建一个以{x:Type MultiSelectTreeView}为关键字的样式。

如果您只想要默认样式,请从代码中删除该语句。