我创建了一个名为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();
}
}
答案 0 :(得分:0)
听起来要么覆盖集合的内容,要么覆盖属性。