Ответ 1
Решение довольно просто: эти события нужно обрабатывать не через метод XAML, а с помощью dough AddHandler.
SomeButton.AddHandler(PointerPressedEvent,
new PointerEventHandler(SomeButton_PointerPressed), true);
Создание приложения Metro (Microsoft UI) для Windows 8 на WPF + С#, я столкнулся с трудностью с событием PointerPressed на кнопке. Событие не происходит, когда я выполняю щелчок левой кнопкой мыши (мышь), но это происходит, если щелкнуть правой кнопкой мыши или коснуться. Итак, что случилось с этим событием? например
<Button x:Name="Somebutton" Width="100" Height="100"
PointerPressed="Somebutton_PointerPressed"/>
Решение довольно просто: эти события нужно обрабатывать не через метод XAML, а с помощью dough AddHandler.
SomeButton.AddHandler(PointerPressedEvent,
new PointerEventHandler(SomeButton_PointerPressed), true);
Если вы работаете с элементом управления Button, попробуйте присоединить событие с событием "Click".
Обратите внимание, что управление Button внутренне рассматривает и обрабатывает PointerPressed, MouseLeftButtonDown, MouseLeftButtonUp и повышает событие Click. Обычно управление кнопками не позволяет запускать и запускать событие PointerPressed, MouseLeftButtonDown, MouseLeftButtonUp.
Я столкнулся с этой проблемой, но не смог использовать принятый ответ, потому что мои кнопки были динамически созданы с помощью 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, чтобы он только запускал событие по щелчку левой кнопкой мыши или щелкнул правой кнопкой мыши. Что бы вы ни хотели.