public void BindEventNonForm(Control control, ThemeChangedEventHandler e) { if (control is Form) { throw new Exception($"传入的控件不能是窗体"); } ThemeChanged -= e; ThemeChanged += e; control.Disposed += (object sender, EventArgs e1) => { ThemeChanged -= e; }; }
private void VSColorTheme_ThemeChanged(ThemeChangedEventArgs e) { // VS triggers this like 5 times for ever _1_ change -- try to limit it var now = DateTime.Now; if (_lastThemeChange == DateTime.MinValue || (now - _lastThemeChange).Seconds > 2) { ThemeChangedEventHandler?.Invoke(this, e); _lastThemeChange = now; } }
//--------------------------------------------------------------------- public void TextViewCreated(IWpfTextView textView) { this.views.Add(textView); textView.Closed += OnTextViewClosed; textView.LayoutChanged += OnLayoutChanged; EventHandler <TextContentChangedEventArgs> onTextChanged = (sender, e) => OnTextChanged(textView, e); ThemeChangedEventHandler onThemeChanged = e => OnThemeChangedEvent(textView, e); handlers.Add(textView, new Handler { OnTextChanged = onTextChanged, OnThemeChanged = onThemeChanged }); textView.TextBuffer.Changed += onTextChanged; VSColorTheme.ThemeChanged += onThemeChanged; }
/// <summary> /// 为窗体绑定事件,并在窗体关闭时自动解绑 /// </summary> /// <param name="f"></param> public void BindEvent(Form f, ThemeChangedEventHandler e) { ThemeChanged -= e; ThemeChanged += e; f.FormClosed += (object sender, FormClosedEventArgs e1) => { ThemeChanged -= e; }; }