我想知道如何将我的一个用户控件中的属性添加到基本控件属性列表中。这可能吗?
So what I am doing is this:
private static List<LabelType> ConvertControlCollectionToList(Control customContainer)
{
LabelTypeList.LabelProps.Clear();
foreach (Control c in customContainer.Controls)
{
LabelTypeList.LabelProps.Add(new LabelType());
LabelTypeList.LabelProps.Last().Name = c.Name;
LabelTypeList.LabelProps.Last().Top = c.Top;
LabelTypeList.LabelProps.Last().Left = c.Left;
LabelTypeList.LabelProps.Last().Height = c.Height;
LabelTypeList.LabelProps.Last().Width = c.Width;
LabelTypeList.LabelProps.Last().Font = c.Font;
LabelTypeList.LabelProps.Last().Text = c.Text;
LabelTypeList.LabelProps.Last().DataColumn = c.?????
LabelTypeList.LabelProps.Last().Rotation = c.?????
}
return LabelTypeList.LabelProps;
}
我在列表的末尾有两个属性,这些属性是我的usercontrol自定义的,但是我需要将它们添加到基类控件类中,所以当我将集合加载回表单时,我可以访问DataColumn和Rotation的设置。这有意义吗?
感谢。
答案 0 :(得分:2)
例如,假设您的控件是名为TextBox
的{{1}},并且您希望在txtFirstName
上显示代表TextBox
文本的属性:
UserControl
修改强>
考虑到对问题的编辑,你不能完全按照你要求做的事情(将你的属性添加到基类的属性)。但是,您可以检查特定控件是否是public string FirstName
{
get { return txtFirstName.Text; }
set { txtFirstName.Text = value; }
}
的实例,如果是,则收集这些属性。为此,请使用:
UserControl
(我删除了对private static List<LabelType> ConvertControlCollectionToList(Control customContainer)
{
LabelTypeList.LabelProps.Clear();
foreach (Control c in customContainer.Controls)
{
LabelType lt = new LabelType();
LabelTypeList.LabelProps.Add(lt);
lt.Name = c.Name;
lt.Top = c.Top;
lt.Left = c.Left;
lt.Height = c.Height;
lt.Width = c.Width;
lt.Font = c.Font;
lt.Text = c.Text;
YourUserControlType uc = c as YourUserControlType;
if(uc != null)
{
lt.DataColumn = uc.DataColumn;
lt.Rotation = uc.Rotation;
}
}
return LabelTypeList.LabelProps;
}
的调用,因为这是一个LINQ扩展方法,每次设置属性时都会遍历整个列表。)
答案 1 :(得分:1)
在WPF中,您可以使用Attached Properties来提供此行为。这就是Grid.Row之类的工作方式。
在Windows窗体中,您需要使用Extender Provider。
请注意,这两个选项都没有真正向基类添加属性 - 您无法更改子类中的基类结构。它们会在设计时添加可用于控件的属性。