扩展树视图时,是否需要指定控件模板或使用默认控件模板

时间:2013-08-13 22:07:19

标签: c# wpf xaml

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

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

1 个答案:

答案 0 :(得分:4)

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

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

如果这样做,您还必须创建一个以{x:Type MultiSelectTreeView}为键的样式。

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