انقر فوق حدث لعناصر التحكم أسفل عناصر التحكم الأخرى

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

  •  01-10-2019
  •  | 
  •  

سؤال

لديّ عنصر تحكمان A و B. يتم وضع Control B فوق A. عند النقر على B يتم إطلاقه فقط ، حيث يتم إطلاق الحدث ، ومع ذلك أحتاج إلى حدث نقرة A إلى Fire أيضًا. هل يمكن تحقيق هذا بطريقة أو بأخرى باستخدام الأحداث الموجه؟

فيما يلي لقطة شاشة لضوابط:

alt text http://www.imagebanana.com/img/hu5znv4/buttons.png

بالطبع هذه الحالة هي مجرد مثال مخفض ، أنا أبحث عن طريقة عامة لرفع الأحداث على جميع عناصر التحكم أسفل مؤشر الماوس / في مكان واحد. However ، حل ملموس لهذه المشكلة سيساعدني أيضًا! شكرا جزيلا لك على أي تلميح!

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

المحلول

يمكن أن يحدث هذا إذا قام معالج الحدث الخاص بالرقابة الداخلية بتعيين خاصية E.Handled إلى True. هذا من شأنه أن يمنع الحدث الموجود من الفقاعات أكثر من ذلك. لكنني راجعت للتو ولا أرى هذا السلوك في WPF 4.

إذا كان E.Handled يمنع الحدث الخاص بك ، فإن ما يمكنك القيام به هو استخدام uielement.addhandler التحميل الزائد الذي يأخذ معلمة معالجة منطقية لتوصيل حدث النقر. يجب أن يتم ذلك في الكود ، وليس الترميز. ثم يجب أن تتلقى حدث النقر في عنصر التحكم الخارجي وسيتم تعيين خاصية E.Handled بالفعل على True.

يقوم الرمز التالي بتعيين خلفية كلا الزرين عندما أقوم بالنقر فوق الزر الداخلي.

<Grid>
    <Button VerticalAlignment="Center" HorizontalAlignment="Center" Click="Click1">
        <Button Width="100" Height="25" Margin="20" Click="Click2" />
    </Button>
</Grid>

الكود وراء

private void Click1( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Blue );
}

private void Click2( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Red );
    //e.Handled = true; // uncomment to stop bubbling
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top