LeftClick стреляет по нажатой мыши?

Я привязываю жест щелчка левой кнопкой мыши к кнопке WPF, ожидая, что он срабатывает только при щелчке мыши (MouseDown + MouseUp). Однако кажется, что он срабатывает сразу после нажатия кнопки мыши (не отпуская ее).

  1. Это правильный способ привязки к левому клику?
  2. Как отличить щелчок от нажатия в обработчике событий?

Образец кода:

public partial class WpfTest : UserControl
{
    // Gesture for clicking
    public static MouseGesture MouseClickGesture = new MouseGesture(MouseAction.LeftClick);

    // Logon command/gesture binding
    public static RoutedUICommand LogonCommand = new RoutedUICommand();
    public static MouseBinding LogonClickBinding = new MouseBinding(LogonCommand, MouseClickGesture);


    public WpfTest()
    {
        InitializeComponent();

        CommandBindings.Add(new CommandBinding(LogonCommand, LogonClicked));
        Logon.InputBindings.Add(LogonClickBinding);
    }

    private void LogonClicked(object sender, ExecutedRoutedEventArgs e)
    {
        MessageBox.Show("LogonClicked");
    }
}

person Travis    schedule 19.08.2011    source источник


Ответы (1)


Я бы не стал использовать эти привязки, насколько я знаю, вы не можете получить от них правильный щелчок (серьезно, кто это разработал?). Из того, что я видел, удивительно сложно получить фактический щелчок по произвольному элементу управления. Я бы посоветовал вам обернуть кнопку вокруг всего, что вы хотите сделать кликабельным, и использовать Command /Click-событие кнопки.

Измените шаблон кнопки на это, чтобы сделать ее невидимой:

<ControlTemplate TargetType="{x:Type Button}">
    <ContentPresenter/>
</ControlTemplate>
person H.B.    schedule 19.08.2011
comment
Я использую привязки команд, потому что мне нужно динамически создавать некоторые кнопки во время выполнения, и я подумал, что это рекомендуемый способ делать такие вещи в WPF. Я предполагаю, что при создании кнопок во время выполнения вы предлагаете мне программно назначить событие Click? - person Travis; 19.08.2011
comment
@Travis: Вы также можете установить команду, если хотите, в зависимости от вашего варианта использования. - person H.B.; 19.08.2011
comment
@Travis: Команды - это объекты, которые инкапсулируют запрос, события просто содержат список вызываемых методов. - person H.B.; 19.08.2011