3

カスタムツリービューの作成を開始しましたが、なぜそれを表示できないように見えるのか疑問に思っていました. treeview を 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;
        }
4

1 に答える 1

4

デフォルトでは、 のデフォルト スタイルを使用しますが、静的コンストラクターでTreeView別のスタイルを指定しました。DefaultStyleKey

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

これを行う場合は{x:Type MultiSelectTreeView}、キーとしてスタイルも作成する必要があります。

デフォルトのスタイルだけが必要な場合は、コードからそのステートメントを削除してください。

于 2013-08-13T22:10:49.607 に答える