编写可在C#WPF中的所有自定义控件中共享的事件

时间:2014-07-11 03:24:17

标签: c# wpf events custom-controls

我有多个自定义控件,我注意到它们共享同一个事件(自定义)示例:OnMoved等

我现在所做的是,复制&将相同的代码从控件粘贴到控件。

那么,我是否还要编写可以在C#WPF中的所有控件中共享的自定义事件?

我用于所有控件的事件示例:

    Point lastPosition = new Point();
    Point currentPosition = new Point();
    public static void OnMoved(object sender, EventArgs e)
    {
        currentPosition.X = Canvas.GetLeft(explorer);
        currentPosition.Y = Canvas.GetTop(explorer);

        // didn't moved
        if (currentPosition.X == lastPosition.X || currentPosition.Y == lastPosition.Y)
        {
            return;
        }

        lastPosition.X = Canvas.GetLeft(explorer);
        lastPosition.Y = Canvas.GetTop(explorer);
    }

3 个答案:

答案 0 :(得分:1)

这取决于您需要事件的确切内容,但您可以将事件放入共享类中:

public class MyEvents
{
    public static void SomeEvent(object sender, EventArgs e)
    {
        MessageBox.Show("hi");
    }
}

然后只需从您需要的地方订阅它:

SomeButton.Click += MyEvents.SomeEvent;

答案 1 :(得分:0)

您可以创建具有公共虚拟事件的基类,并且该事件将出现在从基类派生的任何类中。这将使您不必一遍又一遍地复制和粘贴相同的代码。

答案 2 :(得分:0)

是的,你可以! :D你需要出席的唯一事情是:

- >相同的事件(事件的Args必须完全相同。 - >他们也会这样做。

糟糕的是,您无法将控件与事件混合在一起。例如,您可以为按钮创建一个.Click事件,以便关闭您的应用程序,但是如果您希望在按下键的同时执行相同的操作,那么#34; F8"它不会起作用,因为Event参数不同〜

您可以尝试使用在所有活动中制作相同内容的方法。例如:

private void _Close()
{
Process.GetCurrentProcess().Close();
}

你可以关闭" F5"按下表格或按一下按钮或在文本框中打字"关闭"。

button.Click += Button_Close;
private void Button_Close(Object o, RoutedEventArgs e)
{
_Close();
}

this.KeyDown += This_Close;

private void This_Close(Object o, KeyEventArgs e)
{
     if(e.KeyCode == Key.F5) _Close();
}

TextBox.TextChanged += Text_Close;
private void Text_Close(Object o, TextChangedEventArgs e)
{
if(TextBox.Text == "Close") _Close();
}