samples modern metro mahapps hamburger first c# wpf windows-8 microsoft-metro controls

c# - modern - mahapps.metro samples



PointerPressed no funciona en clic izquierdo (4)

FWIW, he estado enfrentando el mismo problema y lo resolví agregando el controlador de eventos a algún otro control (pero un botón).

En mi caso, tenía un Button envuelto alrededor de un SymbolIcon así:

<Button PointerPressed="OnTempoPressed" PointerReleased="OnTempoReleased"> <SymbolIcon Symbol="Add" /> </Button>

Lo que hice simplemente quité la envoltura de Button y agregué los controladores al mismo SymbolIcon todo funciona ahora:

<SymbolIcon Symbol="Add" PointerPressed="OnTempoPressed" PointerReleased="OnTempoReleased"/>

Al crear la aplicación Metro (Microsoft UI) para Windows 8 en WPF + C #, tuve dificultades con el evento PointerPressed en un botón. El evento no ocurre cuando hago clic con el botón izquierdo (con el mouse), pero ocurre en caso de que haga clic con el botón derecho o toque. Entonces, ¿qué hay de malo con ese evento? por ejemplo

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


He encontrado este problema, pero no pude usar la respuesta aceptada porque mis botones fueron creados dinámicamente por un control de elementos, y no había un buen lugar para llamar a AddHandler.

En su lugar, sub-clasifiqué 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); } }

Ahora, el control consumidor se puede enlazar a PointerPressPreview en lugar de PointerPressed

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

Si lo desea, puede rellenar alguna lógica adicional en el método OnPointerPressed anulado para que solo active el evento con el botón izquierdo o con el botón derecho. Lo que quieras.


La solución es bastante simple: estos eventos deben manejarse no a través de XAML sino a través del método AddHandler.

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


Si está trabajando con un control Button, intente adjuntar el evento con el evento "Click".

Tenga en cuenta que el control de botones considera y maneja internamente los eventos PointerPressed, MouseLeftButtonDown, MouseLeftButtonUp y raise Click. En general, el control del botón no permite que el evento PointerPressed, MouseLeftButtonDown, MouseLeftButtonUp haga burbujas y se dispare.