PointerPressed не работает при щелчке левой кнопкой мыши

Создание приложения Metro (Microsoft UI) для Windows 8 на WPF + С#, я столкнулся с трудностью с событием PointerPressed на кнопке. Событие не происходит, когда я выполняю щелчок левой кнопкой мыши (мышь), но это происходит, если щелкнуть правой кнопкой мыши или коснуться. Итак, что случилось с этим событием? например

 <Button x:Name="Somebutton"  Width="100" Height="100"
PointerPressed="Somebutton_PointerPressed"/>

Ответы

Ответ 1

Решение довольно просто: эти события нужно обрабатывать не через метод XAML, а с помощью dough AddHandler.

SomeButton.AddHandler(PointerPressedEvent, 
new PointerEventHandler(SomeButton_PointerPressed), true); 

Ответ 2

Если вы работаете с элементом управления Button, попробуйте присоединить событие с событием "Click".

Обратите внимание, что управление Button внутренне рассматривает и обрабатывает PointerPressed, MouseLeftButtonDown, MouseLeftButtonUp и повышает событие Click. Обычно управление кнопками не позволяет запускать и запускать событие PointerPressed, MouseLeftButtonDown, MouseLeftButtonUp.

Ответ 3

Я столкнулся с этой проблемой, но не смог использовать принятый ответ, потому что мои кнопки были динамически созданы с помощью ItemsControl, и не было хорошего места для вызова AddHandler.

Вместо этого я подклассифицировал Windows.UI.Xaml.Controls.Button:

public sealed class PressAndHoldButton : Button
{
    public event EventHandler PointerPressPreview = delegate { };

    protected override void OnPointerPressed(PointerRoutedEventArgs e)
    {
        PointerPressPreview(this, EventArgs.Empty);
        base.OnPointerPressed(e);
    }
}

Теперь управление потреблением может связываться с PointerPressPreview вместо PointerPressed

<local:PressAndHoldButton
    x:Name="Somebutton"
    Width="100" 
    Height="100"
    PointerPressPreview="Somebutton_PointerPressed"/>

Если вы хотите, вы можете использовать некоторую дополнительную логику в переопределенном методе OnPointerPressed, чтобы он только запускал событие по щелчку левой кнопкой мыши или щелкнул правой кнопкой мыши. Что бы вы ни хотели.