. Yönlendirilen etkinlikler, Kabarcık, Tünel veya Doğrudan Yönlendirme Trendini destekler.
private void Grid_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button Test clicked!");
}
RoutedEventArgs
Orada belirtilen, bu nedenle olay nakledilmektedir: en
Button.Click
olay işleyicisi bir göz atalım.
önizlemesi adında bu nedenle bu Bubble olayı belirtilmemiş. Eğer
TestButton
tıkladığınızda
<Grid ButtonBase.Click="Grid_Click">
<Button Name="TestButton" Width="100" Height="30" Content="Test" />
</Grid>
, olay Grid
üstesinden gelmektir ve bir ileti görüntüler: Bu aşağıdaki şekilde ortaya konabilir
Düğme Testi tıklandığında! Standart kontrollerin çoğu Tunneling
Usefulness of Bubbling/Tunneling strategies
, olaylar dinlemek böyle Örneğin vb KeyDown
, MouseDown
gibi - DataGrid
kontrol. Enter tuşuna basarak, fonksiyonun bir kayıt eklenmesi olarak adlandırılmasını istiyorum. Ancak DataGrid
zaten KeyDown
etkinliğine sahip, bu nedenle olay yükseltilmedi. Yani mantığınızı Tünel etkinliğinde yapmak zorundasınız - PreviewKeyDown
, KeyDown
olayından önce çalışır. Aynı şey RichTextBoxControl
için geçerlidir. Bubbling
Bazen, belirli bir etkinlik için global işleyici gerekir ki, bu VisualTree tüm denetimler için çalıştı. Doğal olarak, doğrudan bir etkinlik bunu yapamazsınız. Bu nedenle sahnede Bubbling olayı geliyor. Bir başka sebep de WPF'nin ideolojisidir. Image
, başka Button
, vs: kullanıcı Button
yılında TextBlock/Image
tıklayabilirsiniz Bu Button
şeyi içerebilir. Tıklamanın Button
'da olduğunu nasıl anlarız? Bu, Bubbling etkinliğinin yardımıyla.
fazla bilgi için lütfen bkz:
: Button
üzerine tıklama private void Grid_Click(object sender, RoutedEventArgs e)
{
String message = "#" + eventCounter.ToString() + ":\r\n" +
" Sender: " + sender.ToString() + ":\r\n" +
" Source: " + e.Source + ":\r\n" +
" Original Source: " + e.OriginalSource;
lstEvents.Items.Add(message);
}
Sonucu: Ben Click
işleyicisi biraz değişti
Understanding Routed Events and Commands In WPF
Ancak, bildiğim kadarıyla Tıklama, Bubbling olayı yerine doğrudan bir etkinliktir. – SanSolo
@SanSolo: Doğrudan ise, 'Button Test tıklandı!' Mesajı görünmedi. 'Şebeke' değil 'Izgara' için bir işleyici ayarladık ve 'Düğme' için bir tıklama, 'Izgara' için çalışılan olay. “Düğme” deki olay yukarı doğru ilerledi ve “Grid” e geldi. Doğrudan tıklama olayı bildiğim kadarıyla, * 'WinForms' * içinde. –
@SanSolo: Lütfen düzenlememe bakın. –