Подписаться на события Button в пользовательский элемент управления - PullRequest
2 голосов
/ 30 апреля 2010

Знаете ли вы, как я могу подписаться на событие базы моего 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 ]

2 голосов
/ 30 апреля 2010

Я нашел решение!

Вам просто нужно переопределить OnMouseLeftButtonDown метод. Не забудьте позвонить base.OnMouseLeftButtonDown после вашего кода.

1 голос
/ 30 апреля 2010

Ну, это может сработать. Если вы хотите, чтобы в вашем файле xaml отсутствовал какой-либо программный код, и вы хотели бы соблюдать MVVM, то я бы посоветовал вам изучить присоединенное поведение.

Вот ссылка: http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx

Это очень хороший ресурс, который спас меня только на прошлой неделе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...