2

マルチタッチが有効になっている HP TouchSmart Windows 7 マシンに展開されるクライアントのような WPF キオスクを開発しています。私の問題は、Windows 7 のマルチタッチでは、アプリケーションが指の「タップ」をボタン プレス イベントとして認識しないため、ボタンを押して色を変更するトリガーが起動されないことです。

通常、タッチの Windows 7 アニメーションが表示され、ボタン クリック イベントが正常に発生します。指のタップで意図したとおりに機能しないのは、「IsPressed」イベントの XAML 定義スタイルだけです。指で十分な圧力をかけたり、指紋の場合のように転がしたり押したりすると、最終的には機能します。「タップ」でプレス/クリックイベントを発生させるための回避策はありますか?

<Trigger Property="AreAnyTouchesOver" Value="true">
    <Trigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOff}" />
    </Trigger.ExitActions>
    <Trigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOn}" />
    </Trigger.EnterActions>
</Trigger>

<Trigger Property="AreAnyTouchesDirectlyOver" Value="true">
    <Trigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOff}" />
    </Trigger.ExitActions>
    <Trigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOn}" />
    </Trigger.EnterActions>
</Trigger>
4

3 に答える 3

6

ボタンのStylus.IsPressAndHoldEnabled添付プロパティを に設定するだけです。これにより、マウスのクリックだけでなくタッチにも応答してFalse、ボタンのプロパティが設定/クリアされます。IsPressed

UIElement.TouchDown Eventのドキュメントから:

指が画面に触れるとすぐに PreviewTouchDown イベントと TouchDown イベントが発生するようにするには、この要素の Stylus.IsPressAndHoldEnabled 添付プロパティを false に設定します。

たとえば、ボタン スタイルでセッターを使用して、プロパティが false に設定されていることを確認できます。

<Setter Property="Stylus.IsPressAndHoldEnabled" Value="False"/>

マウスクリックとタッチイベントの両方でボタンを確実にアニメーション化する方法を見つけようとしているときに、この質問を見つけました。受け入れられた答えは、間違った道と思われるものを私に送りました:ストーリーボードをタッチアップ/ダウンイベントと同期します。両方にプロパティ トリガーを使用するIsPressedと、シンプルで信頼できることが証明されています。うまくいけば、これにより、他の誰かが同様の間違いを犯すのを防ぐことができます.

于 2013-09-18T23:03:41.367 に答える
5

あなたが何をしたいのかはっきりしません。

あなたの問題に関するいくつかの説明:

In touch IsPressed は、接触が要素上で押し下げられ、移動しきい値を超えて「プレス」を作成した場合にのみトリガーされます (そのため、指を押し下げて少しスライドさせると表示されます)

連絡先が表示されるとすぐに IsPressed = false になります。

ボタンを「タップ」すると、本質的にマウスクリックを行います。これが、イベントが期待どおりに発生する理由です。

それで、あなたは正確に何をしようとしていますか?ボタンが「押された」(「IsPressed」) とき、またはボタンがクリックされた (タップされた) ときに、ストーリーボード アニメーションを起動する必要があります。

これらは 2 つの異なる状況です。多くの場合、デスクトップのメタファーはタッチ環境にうまく変換されないことにも注意してください。ユーザーに視覚的なフィードバックを提供する方法を再考することをお勧めします。

あなたが望むものに対する最も簡単な答えは、あなたの質問を正しく理解していれば、「TouchDown」でトリガーすることだと思います。

アップデート:

これは TouchDown トリガーで機能するはずです

<Button Content="Touch Down Example" Height="20" Width="20">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.TouchDown">
                <BeginStoryboard>
                    ....
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>

: 目の前にタッチ スクリーンがないため、エラーが発生する可能性がありますが、正しいように見えます。

于 2010-09-27T22:47:21.100 に答える