将css从一个控件复制到另一个控件

时间:2014-06-05 13:10:02

标签: c# asp.net

我在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.我认为不可能。 那么有没有办法做到这一点。

编辑1

写作时

control2=control1;

所有css都从control1复制到control2(在我的例子中,两者都是相同的类型)。但天气会改变别的东西吗?

2 个答案:

答案 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;
    }
}