WPF:如何通过属性编辑器/ XAML编辑子类中基类/父类的列属性?

时间:2009-10-02 20:45:21

标签: wpf gridview properties user-controls collections

我创建了一个名为ProductionDataUserControlBase的类,它派生自UserControl类。此基类没有XAML。它的目的是充当我封装在类中的网格的基类,以便在稍后继承类时可以对其进行修改。在基类的构造函数中,我还创建了列并将它们添加到Grid的集合中。我创建了一个名为Columns的公共属性,它所做的就是返回(获取)网格的Columns属性集合。

我创建了一个派生自ProductionDataUserControlBase的子类,它确实包含XAML。在继承控件的属性编辑器中,我的Columns集合存在。我可以通过属性编辑器打开集合并添加新列。但是,列编辑器不包含我在基础中添加的列,即使我可以直观地看到画布上的列。

我假设这是因为我在基础中添加的列不在子项的XAML中。如果我通过子代的XAML添加列,则会创建重复列,因为它们已添加到基础中。如何编辑基础中添加的列的属性而不在子代中使用代码隐藏?

public partial class ProductionDataUserControlBase : UserControl
    {
        private RadGridView _grdProdData;
        private Boolean _InitCalled = false; //Boolean variable used to control whether init was previously called.
        //This is because the loaded event may be fired multiple times depending
        //on what type of control it's been placed into.

        public ProductionDataUserControlBase()
        {
            InitializeComponent();
        }        


        public Telerik.Windows.Controls.GridViewColumnCollection Columns
        {
            get
            {
                return _grdProdData.Columns;            
            }            
        }        

        protected virtual void InitializeComponent()
        {
            if (!_InitCalled)
            {                
                InitializeGrid();
                Columns = _grdProdData.Columns;
                this.AddChild(_grdProdData);                                                

                _InitCalled = true;
            }
        }

        private void InitializeGrid()
        {
            Telerik.Windows.Controls.GridViewColumn grdCol = null;

            this._grdProdData = new RadGridView();
            this._grdProdData.AutoGenerateColumns = false;

            grdCol = new Telerik.Windows.Controls.GridViewColumn() { HeaderText = "PSTAT", Name = "grdColPSTAT", UniqueName = "PSTAT" };
            _grdProdData.Columns.Add(grdCol);

            grdCol = new Telerik.Windows.Controls.GridViewColumn() { HeaderText = "PCONO", Name = "grdColPCONO", UniqueName = "PCONO" };
            _grdProdData.Columns.Add(grdCol);

         }

    }

<ProductionDataUserControlBase x:Class="AmerenProductionDataUserControl"    
            xmlns:MSControls="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns="clr-namespace:AmerenProductionDataUserControl;assembly=AmerenProductionDataUserControl" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">

    </ProductionDataUserControlBase>

public partial class AmerenProductionDataUserControl : ProductionDataUserControlBase
        {

            public AmerenProductionDataUserControl()
            {
                InitializeComponent();                                            
            }
        }

1 个答案:

答案 0 :(得分:0)

听起来要么覆盖集合的内容,要么覆盖属性。