19

WPF + C#でWindows 8用のMetro(Microsoft UI)アプリを作成すると、ボタンのPointerPressedイベントで問題が発生しました。(マウスで)左クリックを実行してもイベントは発生しませんが、右クリックまたはタップした場合は発生します。では、そのイベントの何が問題になっていますか?例えば

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

4 に答える 4

39

解決策は非常に単純です。これらのイベントは、XAMLではなく、AddHandlerメソッドを介して処理する必要があります。

SomeButton.AddHandler(PointerPressedEvent, 
new PointerEventHandler(SomeButton_PointerPressed), true); 
于 2013-02-11T09:09:08.407 に答える
2

この問題が発生しましたが、ボタンが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);
    }
}

これで、消費コントロールはPointerPressedではなくPointerPressPreviewにバインドできます

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

必要に応じて、オーバーライドされたOnPointerPressedメソッドにいくつかの追加ロジックを詰め込んで、左クリックまたは右クリックでのみイベントを発生させることができます。あなたが望むものなら、なんでも。

于 2016-04-11T00:56:22.670 に答える
0

FWIW、私は同じ問題に直面していて、イベントハンドラーを他のコントロール(ただしボタン)に追加することで解決しました。

私の場合、私は次ButtonのようにラップアラウンドしましたSymbolIcon

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

私がやったことは、Buttonラップを削除してそれをに置き換えViewBox、それからハンドラーをViewBoxそれ自体に追加しただけで、すべてが機能するようになりました。

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

Buttonビジュアルとエフェクト(ホバーなど)が失われることに注意してください。しかし、私にとってはそれは問題ではありませんでした。ストックスタイルから再適用できると思います。

于 2018-10-20T23:47:56.497 に答える
-1

Buttonコントロールを使用している場合は、「Click」イベントを使用してイベントをアタッチしてみてください。

Buttonコントロールは、PointerPressed、MouseLeftButtonDown、MouseLeftButtonUpを内部的に考慮して処理し、Clickイベントを発生させることに注意してください。通常、ボタンコントロールでは、PointerPressed、MouseLeftButtonDown、MouseLeftButtonUpイベントがバブルアップして発生することはできません。

于 2013-02-08T06:56:18.850 に答える