将Button的事件订阅到自定义控件中

时间:2010-04-30 14:19:17

标签: c# wpf events custom-controls

您知道我如何订阅customControl基础的活动吗? 我有一个带有一些依赖属性的自定义控件:

public class MyCustomControl : Button
{
    static MyCustomControl ()
    {
        DefaultStyleKeyProperty.OverrideMetadata( typeof( MyCustomControl ), new FrameworkPropertyMetadata( typeof( MyCustomControl ) ) );
    }

    public ICommand KeyDownCommand
    {
        get { return (ICommand)GetValue( KeyDownCommandProperty ); }
        set { SetValue( KeyDownCommandProperty, value ); }
    }
    public static readonly DependencyProperty KeyDownCommandProperty = 
    DependencyProperty.Register( "KeyDownCommand", typeof( ICommand ), typeof( MyCustomControl ) );

    public ICommand KeyUpCommand
    {
        get { return (ICommand)GetValue( KeyUpCommandProperty ); }
        set { SetValue( KeyUpCommandProperty, value ); }
    }
    public static readonly DependencyProperty KeyUpCommandProperty = 
    DependencyProperty.Register( "KeyUpCommand", typeof( ICommand ), typeof( MyCustomControl ) );

    public ICommand KeyPressedCommand
    {
        get { return (ICommand)GetValue( KeyPressedCommandProperty ); }
        set { SetValue( KeyPressedCommandProperty, value ); }
    }
    public static readonly DependencyProperty KeyPressedCommandProperty = 
    DependencyProperty.Register( "KeyPressedCommand", typeof( ICommand ), typeof( MyCustomControl ) );
}

我想订阅Button的事件(比如MouseLeftButtonDown)来在我的customControl中运行一些代码。

你知道如何在构造函数中做这样的事情吗?

static MyCustomControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata( typeof( MyCustomControl ), new FrameworkPropertyMetadata( typeof( MyCustomControl ) ) );
        MouseLeftButtonDownEvent += (object sender, MouseButtonEventArgs e) => "something";
    }

谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

我找到了解决方案!

您只需要覆盖OnMouseLeftButtonDown方法。不要忘记在代码之后调用base.OnMouseLeftButtonDown。

答案 1 :(得分:1)

嗯,这可行。如果你想在你的xaml文件中没有任何代码隐藏,并且想要遵守MVVM,那么我建议你研究附加行为。

这是一个链接:http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx

这是一个非常好的资源,并在上周救了我。