2010-07-07 7 views
5

Bubbeling olayları ile ilgili bir sorunum var. Kenarlıklar, grid, stackpanel, ancak ScrollViewerOlay bubbeling ile ilgili sorunlar (ScrollViewer)

'da kabarcıklar oluşturmayı başarabilirim Aşağıdaki örneğe bakarsanız, TextBlock'u tıklattığınızda olayın Kılavuza kadar bublok olduğunu fark edeceksiniz. Ancak ScrollViewer'ı eklediğimde olay burada durur ve Izgaraya gönderilmez.

Şimdi bu sevgililerden biri var mı ve eğer tamir edilebilirse? Ben her zaman kullandığım gibi bir ScrollViewer ile olayları kabarcık mümkün olması gerekir.

<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 gibi ScrollViewer geçersiz kılma MouseButtonEventArgs üzerinde e.Handled önleyebilir kapalı bir sınıftır ve kullanımı ADDHANDLER elde edilemez. – Adam

cevap

1

AddHandler (kendiDelegate, True) kullanın; görsel ağaçtaki diğer denetimler tarafından belirlenen Handled bayrağı yoksayılacak olay işleyicileri eklemek için sözdizimi.

0

Bu sorunu yaşadım ve kullanıcı572559 tarafından gönderilen düzeltme sorunumu düzeltti. Gerekli olanlara için aşağıdaki (gönderme için değiştirilmiş) ne yaptım:

_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) 
    { 
     ... 
    } 

Ayrıca bu işleme hare eğer siz de MouseMove taşıma olduğumuzu belirtmek isteriz. MouseMove bunu yapmaya gerek kalmadan benim için çalıştı ve bu şekilde de desteklenmiyor gibi görünüyor (kabarcıklanma olayı değil).

0

Bu

public sealed class ClickScrollViewer : ScrollViewer 
{ 
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
    { 
     this.Focus(); 
    } 
}