簡體   English   中英

當我具有觸摸事件處理程序時,為什么我的鼠標事件處理程序不起作用?

[英]Why my Mouse Event Handlers are not working when I have Touch Event Handlers?

我的某些最終用戶有觸摸屏,而其他一些則有PC。 在觸摸屏上, PreviewMouseUp/Down與觸摸事件處理程序一起觸發,從而導致重復行為(用PreviewMousUp / Down編寫的函數執行兩次)。

所以我的示例Button XAML:

<Button x:Name="Whatever" Background="Transparent"  MouseUp="Whatever_MouseUp" MouseDown="Whatever_MouseDown" TouchUp="Whatever_TouchUp" TouchDown="Whatever_TouchDown">
    <StackPanel>
        <TextBlock x:Name="WhateverText" Text="Soemthing" FontSize="13"/>
        <Image x:Name="WhateverImage" Source="bla/bla/bla"/>
    </StackPanel>
</Button>

為什么在PC上沒有觸發MouseDownMouseUp事件處理程序?

如果我在觸摸屏上執行,它的工作原理就像一個超級按鈕(Touch事件處理程序)。 但是,在我的PC(VS-2015)上根本不起作用。 請和謝謝

似乎Click事件處理程序可防止觸發MouseDown和MouseUp事件。 我希望這是因為,當我從頭開始構建自定義控件(如按鈕)時,會使用這些事件來觸發Click事件。 這只是我的期望。

無論如何,我嘗試了一下,如果您未實現TouchDown / Up,則在觸摸和非觸摸上均會觸發PreviewMouseDown / Up。 但是,如果您使用它們實現了TouchDown / Up,則在TOUCH上的執行將如下所示:> TouchDown> PreviewMouseDown> TouchUp> PreviewMouseUp。 在NON-TOUCH上的執行將如下所示:> PreviewMouseDown> PreviewMouseUp。 因此,我建議您使用PreviewMouseDown / Up,因為它適用於觸摸和非觸摸。

您也可以使用MouseRightButtonDown / Up與您一起使用。 但是您會注意到,它之后會觸發MouseDown / Up。 您可以通過添加e.Handled = true來防止這種情況。 在MouseRightButtonDown / Up處理程序中。

嘗試利用這些提示,如果您無法解決,請告訴我,我會與您一起考慮的。 祝好運。

我不確定為什么不簡單地使用同時適用於鼠標和觸摸的Click事件,但是在這里解釋了為什么看不到MouseUp和MouseDown的原因: WPF MouseLeftButtonUp Not Firing 除非您創建自己的按鈕控件並控制容器本身或使用自己的按鈕模板,否則如果沒有“單擊事件”選項,PreviewXXX事件將是最好的選擇。 即使您在模板的StackPanel上設置了事件處理程序,您也不會獲得MouseUp事件,因為Button控件的默認行為會導致Button捕獲鼠標。 下面的代碼僅會為StackPanel獲取MouseDown事件,但永遠不會觸發MouseUp。 為了進行驗證,我添加了Click事件,每次在Button中釋放鼠標時都會觸發該事件,這是Button的預期行為。

    <Button Click="Whatever_Click" x:Name="Whatever" MouseUp="Whatever_MouseUp" MouseDown="Whatever_MouseDown" TouchUp="Whatever_TouchUp" TouchDown="Whatever_TouchDown">
        <Button.Template>
            <ControlTemplate TargetType="{x:Type Button}">
                <StackPanel x:Name="stackButton" MouseUp="Whatever_MouseUp" MouseDown="Whatever_MouseDown" TouchUp="Whatever_TouchUp" TouchDown="Whatever_TouchDown">
                    <TextBlock x:Name="WhateverText" Text="StackPanelClick" FontSize="13"/>
                    <Image x:Name="WhateverImage" Source="dice.png"/>
                </StackPanel>
            </ControlTemplate>
        </Button.Template>
    </Button>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM