سؤال

أقوم بتطوير كشك WPF مثل العميل الذي سيتم نشره على جهاز HP TouchSmart الذي يعمل بنظام التشغيل Windows 7 مع تمكين اللمس المتعدد.مشكلتي هي أنه مع نظام اللمس المتعدد في نظام التشغيل Windows 7، لا يتعرف التطبيق على "نقرة" الإصبع كحدث ضغط على الزر، وبالتالي لا يتم إطلاق زر الضغط على Trigger لتغيير اللون أبدًا.

عادةً ما يتم عرض الرسوم المتحركة التي تعمل باللمس لنظام التشغيل Windows 7، ويتم تشغيل حدث النقر على الزر بشكل جيد.إن نمط تعريف XAML فقط للحدث "IsPressed" هو الذي لا يعمل على النحو المقصود بنقرة إصبع.إنه يعمل في النهاية إذا تم تطبيق ضغط كافٍ بإصبعك و/أو قمت باللف أو الضغط كما تفعل مع بصمة الإصبع.هل هناك حل بديل لجعل إطلاق "النقر" حدثًا للضغط/النقر؟

<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>
هل كانت مفيدة؟

المحلول

أنا لست واضحا بشأن ما تريد أن تفعل.

بعض التفسير حول مشكلتك:

يتم تشغيل Ispressed في اللمس فقط عندما يتم تثبيت جهة الاتصال الخاصة بك على العنصر ويتم تمرير عتبة الحركة لإنشاء "مطبعة" (وهذا هو السبب في أنك تراها إذا ضغطت على الإصبع وتنزلقه قليلاً)

بمجرد ظهور جهة الاتصال ispressed = false.

عندما "تنقر" على زر ، فأنت في جوهرها تقوم بنقرة ماوس. هذا هو السبب في حرائق الأحداث كما هو متوقع.

فما الذي تحاول فعله بالضبط؟ تريد أن تطلق الرسوم المتحركة على لوحة العمل عندما يتم "إغلاق زر" ("Ispressed") أو عند النقر فوق زر (استغلال).

هاتان حالتان مختلفتان ، لاحظ أيضًا أنه في كثير من الأحيان لا تترجم استعارات سطح المكتب بشكل جيد إلى بيئة اللمس. قد ترغب في إعادة التفكير في كيفية تقديم ملاحظات مرئية للمستخدم.

أعتقد أن أسهل إجابة لما تريد هو تشغيل "الهبوط" إذا فهمت أسئلتك بشكل صحيح.

تحديث:

هذا يجب أن يعمل من أجل مشغل الهبوط

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

ملاحظة: ليس لدي شاشة تعمل باللمس أمامي حتى تكون هناك أخطاء لكنها تبدو صحيحة.

نصائح أخرى

ببساطة اضبط Stylus.IsPressAndHoldEnabled خاصية مرفقة False للزر. هذا سوف يتسبب في الزر IsPressed الخاصية المراد تعيينها/مسحها استجابة لللمس بالإضافة إلى نقرة الماوس.

من وثائق uielement.touchdown الحدث:

للتسبب في حدوث أحداث PreviewTouchdown ومسقط بمجرد لمس الإصبع على الشاشة ، قم بتعيين خاصية مرفقة على stylus.ispressandholdenabled على هذا العنصر.

على سبيل المثال ، يمكنك استخدام Setter في نمط الزر الخاص بك للتأكد من ضبط الخاصية على خطأ:

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

لقد وجدت هذا السؤال أثناء محاولة إيجاد طريقة لجعل الزر الخاص بي متحركًا بشكل موثوق لكل من نقرات الماوس ولمس الأحداث. أرسلتني الإجابة المقبولة إلى أسفل ما يبدو أنه المسار الخاطئ: مزامنة القصص المصورة مع أحداث Touch Up/Down. باستخدام IsPressed لقد أثبت مشغل الممتلكات لكلاهما أنه بسيط وموثوق به. نأمل أن يوفر هذا شخصًا آخر من ارتكاب خطأ مماثل.

لتطوير اللمس، أوصي باستخدام مجموعة أدوات Microsoft® Surface® لنظام التشغيل Windows Touch Beta في مشروعك، واستخدام عناصر التحكم السطحية المضمنة، نظرًا لأنها تتعامل مع أحداث اللمس بشكل صحيح، والعديد من حالات الاستخدام، مثل قيام المستخدم بالضغط على زر بإصبعين، ورفعهما واحدًا تلو الآخر.يجب أن يؤدي حدث "الرفع" أو حدث اللمس الأخير فقط إلى تشغيل حدث النقر.

جميع عناصر التحكم السطحية هي فئات فرعية من عناصر تحكم Windows، لذا فإن الفئات الفرعية لـ SurfaceListBox ListBox، والفئات الفرعية SurfaceButton Button، وما إلى ذلك.بهذه الطريقة، ستظل جميع الأنماط والقوالب تعمل مع عناصر التحكم هذه.

في حالتك، سوف تحتاج إلى استخدام عنصر التحكم SurfaceButton.ما عليك سوى إضافة مرجع إلى مجموعات مجموعة الأدوات، وفي العنصر الخارجي (، ، وما إلى ذلك)، أضف مرجعًا إلى مساحة الاسم السطحية، مثل

xmlns:s="http://schemas.microsoft.com/surface/2008"

ثم قم بإضافة عناصر التحكم السطحية من مساحة الاسم تلك، مثل

<s:SurfaceButton x:Name="button1" Click="OnButtonClick" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top