WPF - كيفية التعامل مع أحداث الماوس خارج عنصر الأمر الذي أثار هذا الحدث؟

StackOverflow https://stackoverflow.com/questions/1077938

سؤال

والسياق:

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

public partial class Window1 : Window
{
    DrawingTool drawTool = new DrawingTool();
    public Window1()
    {
        InitializeComponent();            
    }

    private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        drawTool.OnMouseLeftButtonDown(e);
    }
}

وجميل، ولكن أريد المزيد ...

والسؤال:

هل من الممكن للتعامل مع الأحداث قماش أثيرت في صفي DrawingTool مباشرة دون الحاجة تعريف معالجات الأحداث قماش. أود أن إبقاء قانون بلدي Window1 نظيفة وركز على الأشياء النافذة ونقل الأحداث معالجة تماما في دروسي.

وفكرت في اشتقاق DrawingTool من FrameworkElement، تجاوز OnRender واستدراجه بشفافية على قماش فوق ذلك المستخدم يبدو أن جعل على قماش ولكن في الواقع أن تثار في DrawingTool والتعامل معها داخليا. يعمل هذا الأسلوب مع وظيفة الاستقبال (بعد ان يتم رسم يضاف الكائن الانتباه إلى الأطفال قماش وإزالتها من الأطفال DrawingTool) ولكن عندما يتعلق الأمر إلى وضع اختيار أو غيرهم هناك مشاكل مع ضرب اختبار العناصر على سبيل المثال.

وهكذا، سأكون ممتنا لأي اقتراح كيفية حل مشكلتي أو تفسير لماذا هذا هو فكرة غبية في كل شيء:)

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

المحلول

ومجرد فضح حقول التحكم الخاصة والممتلكات العامة وعندما يكون لديك مثيل Window1 يمكنك القيام به فقط

Window1.DrawingCanvas.MouseLeftButtonDown += YourHandlerMethod;

نصائح أخرى

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

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

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