我在aspx页面上有多个图像控件。我正在分配一些css如下
control1.Style.Add("position", "relative");
...
...
取决于一些计算。
现在我想要的是在其他控件上复制相同的样式control2
//something like
control2.Style=control1.Style;
//not possible since it has no setter
如果我说
,还有另一种方法可以做到这一点 control2=control1;
它会将control1中的所有属性复制到控件2.我认为不可能。 那么有没有办法做到这一点。
写作时
control2=control1;
所有css都从control1复制到control2(在我的例子中,两者都是相同的类型)。但天气会改变别的东西吗?
答案 0 :(得分:2)
我认为没有直接的方法可以做到这一点。但是你可以像这样创建一个扩展方法。
public static class StyleExtension
{
public static void AddExisting(this CssStyleCollection collection,
CssStyleCollection existing)
{
foreach (string item in existing.Keys)
{
collection.Add(item, existing[item]);
}
}
}
你可以像这样使用它。
cmdSubmit.Style.Add("Color", "Red");
cmdSubmit.Style.Add("FontSize", "20");
Button1.Style.AddExisting(cmdSubmit.Style);
答案 1 :(得分:0)
您的问题已在某个论坛HERE上得到解答 他们写了一个克隆控件的函数。
为了遵守stackoverflow的规则,我在下面的答案中添加了代码:
/// <summary>
/// The ControlCloneEngine creates copies of ASP.NET controls
/// </summary>
public class ControlCloneEngine
{
private int m_instanceCount;
public ControlCloneEngine()
{
m_instanceCount = 1;
}
/// <summary>
/// Clone a control. Call this function in Page_Init
/// </summary>
/// <param name="ctrlSource">The control to clone</param>
/// <returns>a new copy of the control</returns>
public Control Copy(Control ctrlSource)
{
Type t = ctrlSource.GetType();
Control ctrlDest = (Control)t.InvokeMember("", BindingFlags.CreateInstance, null, null, null);
foreach (PropertyInfo prop in t.GetProperties())
{
if (prop.CanWrite)
{
if (prop.Name == "ID")
{
ctrlDest.ID = ctrlSource.ID + "c" + m_instanceCount;
}
else
{
prop.SetValue(ctrlDest, prop.GetValue(ctrlSource, null), null);
}
}
}
m_instanceCount++;
return ctrlDest;
}
}