2

我创建了一个从Button类继承的用户定义控件,并且我希望一次轻松更改所有按钮的视觉样式,而不必将每个实例化控件放在集合中并且必须遍历它们更改特定字段。

问题

base我可以使用静态字段来更改父类中的另一个非静态字段吗?

这是一个简短的示例:

public class KewlButton : Button
{
    /// <summary>
    /// Changes visual properties of the control in all instances at once.
    /// </summary>
    class Crossdress
    {
        static Color BackColor { 
            private get;

            set {
                // Set the BackColor in all instances of KewlButton
            }
        }
    }
}
4

2 回答 2

2

您可以定义一些静态事件静态委托,这里是委托

public class KewlButton : Button {
  public delegate void SetBackColor(Color color);
  static SetBackColor setBackColor;
  public KewlButton(){
    setBackColor += ChangeBackColor;
    Disposed += (s,e) => {
       setBackColor -= ChangeBackColor;
    };
  }
  private void ChangeBackColor(Color color){ 
     BackColor = color;
  }
  public class Crossdress {
    public static Color BackColor { 
        set {
            if(setBackColor!=null) setBackColor(value);
        }
    }
  }
}

//Usage
KewlButton.Crossdress.BackColor = Color.Red;

事件的使用与委托非常相似。

于 2013-11-08T17:41:03.463 回答
0

实现这一点的最简单方法是将要控制的所有颜色分离到一个完全不同的类中。

class MyTheme { 
  public Color BackColor { get; set; } 
  public Color OtherColor { get; set; } 

  public event EventHandler Changed;
}

如果任何值发生更改,此类也将引发一个事件。然后,您可以将这种类型的实例传递给应用程序中的每个控件,并让他们将其用于所有颜色访问

于 2013-11-08T17:36:29.060 回答