سؤال

حاولت هذه XAML:

<Slider Width="250" Height="25" Minimum="0" Maximum="1" MouseLeftButtonDown="slider_MouseLeftButtonDown" MouseLeftButtonUp="slider_MouseLeftButtonUp" />

وهذا C#:

private void slider_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
sliderMouseDown = true;
}

private void slider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
sliderMouseDown = false;
}

على sliderMouseDown متغير لا يتغير أبدا لأن MouseLeftButtonDown و MouseLeftButtonUp الأحداث لم المطروحة.كيف يمكنني الحصول على هذا الرمز إلى العمل عندما يكون المستخدم على زر الماوس الأيسر باستمرار على المتزلج أن يكون منطقي تعيين القيمة إلى true ، عندما الماوس فوق ، منطقي هو باطل ؟

هل كانت مفيدة؟

المحلول

والمتزلجون ابتلاع MouseDown الأحداث (على غرار زر).

ويمكنك التسجيل للحصول على الأحداث PreviewMouseDown وPreviewMouseUp التي تحصل أطلقت قبل التمرير لديه فرصة للتعامل معها.

نصائح أخرى

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

this.AddHandler
(
    Slider.MouseLeftButtonDownEvent,
    new MouseButtonEventHandler(slider_MouseLeftButtonDown),
    true
);

يرجى ملاحظة الحقيقية الحجة. تقول في الأساس أن كنت ترغب في تلقي هذا الحدث حتى إذا كان قد تم وضع علامة التعامل معها. للأسف, تركيب معالج حدث مثل هذا لا يمكن أن يتم إلا من قانون الإجراءات وليس من xaml.

وبعبارة أخرى, مع هذا الأسلوب يمكنك تسجيل معالج الحدث العادي الحدث (الذي فقاعات) بدلا من معاينة الحدث الذي الأنفاق (وبالتالي تحدث في أوقات مختلفة).

انظر حفر أعمق الشريط الجانبي في الصفحة 70 من WPF العنان للحصول على مزيد من المعلومات.

وحاول استخدام LostMouseCapture وGotMouseCapture.

    private void sliderr_LostMouseCapture(object sender, MouseEventArgs e)

    private void slider_GotMouseCapture(object sender, MouseEventArgs e)

وGotMouseCapture الحرائق عندما يبدأ المستخدم سحب شريط التمرير، وLostMouseCapture عندما يطلقها.

وأود أن أذكر أن المتزلج لا ابتلاع تماما الحدث MouseDown بأكمله. من خلال النقر على علامة التجزئة، وكنت <م> يمكن الحصول على إخطار لهذا الحدث. سوف المتزلج يتم معالجة الأحداث MouseDown إلا أنها تأتي من شريط التمرير ... المنزلق.

وأساسا إذا كنت ترغب في استخدام

AddHandler(Slider.MouseLeftButtonDownEvent, ..., true)

ونسخة مع القراد تشغيل، ومن المؤكد أن هذا الحدث تم التعامل معها من قبل. إذا كنت لا عليك في نهاية المطاف مع حالة الحافة حيث كنت تعتقد كان النقر على شريط التمرير، ولكن كان حقا القراد. تسجيل لهذا الحدث معاينة هو أسوأ من ذلك - عليك أن تلتقط الحدث في أي مكان، حتى على المسافة البيضاء بين القراد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top