2010-07-07 14 views
5

के साथ समस्याएं मुझे बबबेलिंग घटनाओं में कोई समस्या है। मैं सीमाओं, ग्रिड, स्टैकेपनेल में बबल घटनाओं का प्रबंधन करता हूं, लेकिन स्क्रॉलवियरइवेंट बबबेलिंग (स्क्रॉलव्यूयर)

यदि आप नीचे दिए गए उदाहरण को देखते हैं तो आप देखेंगे कि जब आप टेक्स्टब्लॉक पर क्लिक करते हैं तो ईवेंट ग्रिड तक बबेल किया जाता है। लेकिन जब मैं स्क्रॉलव्यूयर शामिल करता हूं तो ईवेंट यहां रुक जाता है और ग्रिड तक नहीं भेजा जाता है।

क्या कोई अब इस खुशी को देखता है और यदि इसे ठीक किया जा सकता है? मुझे वास्तव में स्क्रॉल व्यूअर के माध्यम से ईवेंट को बबल करने में सक्षम होना चाहिए क्योंकि मैं इसे हर समय उपयोग करता हूं।

<Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown"> 
     <!--<ScrollViewer MouseLeftButtonDown="ScrollViewer_MouseLeftButtonDown">--> 
      <StackPanel Orientation="Vertical" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"> 
       <TextBlock Text="Click me to bubble an event" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/> 
      </StackPanel> 
     <!--</ScrollViewer>--> 
</Grid> 


public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     MessageBox.Show("LayoutRoot clicked"); 
    } 


    private void ScrollViewer_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     MessageBox.Show("ScrollViewer clicked"); 
     e.Handled = false; 
    } 

    private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     MessageBox.Show("StackPanel clicked"); 
     e.Handled = false; 
    } 

    private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     MessageBox.Show("Textblock clicked"); 
     e.Handled = false; 
    } 
} 
+0

ScrollViewer तरह ScrollViewer अधिभावी द्वारा MouseButtonEventArgs पर e.Handled रोका जा सकता है एक सील बंद वर्ग और से, का उपयोग AddHandler प्राप्त नहीं किया जा सकता है। – Adam

उत्तर

1

AddHandler (yourDelegate, True) का उपयोग करें; इवेंट हैंडलर जोड़ने के लिए सिंटैक्स, जो दृश्य पेड़ में अन्य नियंत्रणों द्वारा सेट किए गए हैंडल ध्वज को अनदेखा कर देगा।

0

मुझे यह समस्या थी और उपयोगकर्ता572559 द्वारा पोस्ट किया गया फिक्स मेरे मुद्दे को ठीक करता है। उन इसकी जरूरत है कि के लिए, नीचे मैं क्या किया (पोस्ट करने के लिए संशोधित) है:

_scrollViewer = new ScrollViewer(); 
_scrollViewer.AddHandler(
    ScrollViewer.MouseLeftButtonDownEvent, 
    new MouseButtonEventHandler(OnMouseLeftButtonDown), 
    true); 
_scrollViewer.AddHandler(
    ScrollViewer.MouseLeftButtonUpEvent, 
    new MouseButtonEventHandler(OnMouseLeftButtonUp), 
    true); 

...

void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     ... 
    } 

    void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     ... 
    } 

यह भी ध्यान रखें कि यदि आप इन से निपटने खरगोश आप MouseMove से निपटने की जा सकती है और साथ ही। MouseMove ने ऐसा करने की आवश्यकता के बिना मेरे लिए काम किया, और यह इस फैशन में भी समर्थित नहीं है (एक बुलबुला घटना नहीं)।

0

आप इस

public sealed class ClickScrollViewer : ScrollViewer 
{ 
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
    { 
     this.Focus(); 
    } 
} 
संबंधित मुद्दे