自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WPF的事件路由系統(tǒng)傳播機(jī)制(隧道傳播、直接傳播和冒泡傳播)

開發(fā) 后端
隧道傳播是事件從根元素向下傳遞的機(jī)制。事件會(huì)依次經(jīng)過(guò)可視化樹中的每個(gè)元素,直到達(dá)到事件的原始源。在隧道傳播中,事件處理程序會(huì)首先被調(diào)用,然后再向下傳遞。

WPF的事件路由系統(tǒng)包括三種類型的事件傳播機(jī)制:隧道傳播、直接傳播和冒泡傳播。每種傳播機(jī)制都有不同的傳播路徑和使用場(chǎng)景。

1. 隧道傳播(Tunneling)

隧道傳播是事件從根元素向下傳遞的機(jī)制。事件會(huì)依次經(jīng)過(guò)可視化樹中的每個(gè)元素,直到達(dá)到事件的原始源。在隧道傳播中,事件處理程序會(huì)首先被調(diào)用,然后再向下傳遞。

示例代碼:

<Grid PreviewMouseDown="Grid_PreviewMouseDown">
    <Button PreviewMouseDown="Button_PreviewMouseDown" />
</Grid>
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    Console.WriteLine("Grid PreviewMouseDown");
    e.Handled = true; // 停止事件傳播
}

private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    Console.WriteLine("Button PreviewMouseDown");
}

使用場(chǎng)景:

  • 可以在父級(jí)元素上捕獲事件并進(jìn)行處理,然后決定是否繼續(xù)傳播給子級(jí)元素。
  • 可以在事件的早期階段對(duì)事件進(jìn)行攔截或干預(yù)。
  • 可以在父級(jí)元素上實(shí)現(xiàn)一些全局的事件處理邏輯。

2. 直接傳播(Direct)

直接傳播是事件沿著可視化樹的路徑上的每個(gè)元素進(jìn)行傳播的機(jī)制。它對(duì)事件的處理順序沒(méi)有要求,只是按照元素在視覺(jué)樹中的順序觸發(fā)。

示例代碼:

<Grid PreviewMouseDown="Grid_PreviewMouseDown">
    <Button PreviewMouseDown="Button_PreviewMouseDown" />
</Grid>
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    Console.WriteLine("Grid PreviewMouseDown");
}

private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    Console.WriteLine("Button PreviewMouseDown");
}

使用場(chǎng)景:

  • 可以在父級(jí)元素和子級(jí)元素上都處理事件,并且不影響傳播的順序。
  • 可以在不同元素上進(jìn)行不同的事件處理邏輯。

3. 冒泡傳播(Bubbling)

冒泡傳播是事件從事件源開始向上傳遞的機(jī)制,沿著可視化樹向上冒泡直到達(dá)到根元素。在冒泡傳播中,事件處理程序會(huì)首先被子級(jí)元素調(diào)用,然后再依次向上傳遞。

示例代碼:

<Grid MouseDown="Grid_MouseDown">
    <Button MouseDown="Button_MouseDown" />
</Grid>
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
    Console.WriteLine("Grid MouseDown");
}

private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
    Console.WriteLine("Button MouseDown");
    e.Handled = true; // 停止事件傳播
}

使用場(chǎng)景:

  • 可以在父級(jí)元素上捕獲子級(jí)元素的事件并進(jìn)行處理。
  • 可以在父級(jí)元素上實(shí)現(xiàn)一些全局的事件處理邏輯。

鼠標(biāo)單擊事件序列說(shuō)明:

  • PreviewMouseLeftButtonDown for Window (Tunnel):窗口接收到鼠標(biāo)左鍵按下的預(yù)覽事件。
  • PreviewMouseDown for Window (Tunnel):窗口接收到鼠標(biāo)按下的預(yù)覽事件。
  • PreviewMouseLeftButtonDown for StackPanel (Tunnel):StackPanel(堆棧面板)接收到鼠標(biāo)左鍵按下的預(yù)覽事件。
  • PreviewMouseDown for StackPanel (Tunnel):StackPanel接收到鼠標(biāo)按下的預(yù)覽事件。
  • PreviewMouseLeftButtonDown for Label (Tunnel):Label(標(biāo)簽)接收到鼠標(biāo)左鍵按下的預(yù)覽事件。
  • PreviewMouseDown for Label (Tunnel):Label接收到鼠標(biāo)按下的預(yù)覽事件。
  • MouseLeftButtonDown for Label (Bubble):Label接收到鼠標(biāo)左鍵按下的冒泡事件。
  • MouseDown for Label (Bubble):Label接收到鼠標(biāo)按下的冒泡事件。
  • MouseLeftButtonDown for StackPanel (Bubble):StackPanel接收到鼠標(biāo)左鍵按下的冒泡事件。
  • MouseDown for StackPanel (Bubble):StackPanel接收到鼠標(biāo)按下的冒泡事件。
  • MouseLeftButtonDown for Window (Bubble):窗口接收到鼠標(biāo)左鍵按下的冒泡事件。
  • MouseDown for Window (Bubble):窗口接收到鼠標(biāo)按下的冒泡事件。
  • PreviewMouseLeftButtonUp for Window (Tunnel):窗口接收到鼠標(biāo)左鍵釋放的預(yù)覽事件。
  • PreviewMouseUp for Window (Tunnel):窗口接收到鼠標(biāo)釋放的預(yù)覽事件。
  • PreviewMouseLeftButtonUp for StackPanel (Tunnel):StackPanel接收到鼠標(biāo)左鍵釋放的預(yù)覽事件。
  • PreviewMouseUp for StackPanel (Tunnel):StackPanel接收到鼠標(biāo)釋放的預(yù)覽事件。
  • PreviewMouseLeftButtonUp for Label (Tunnel):Label接收到鼠標(biāo)左鍵釋放的預(yù)覽事件。
  • PreviewMouseUp for Label (Tunnel):Label接收到鼠標(biāo)釋放的預(yù)覽事件。
  • MouseLeftButtonUp for Label (Bubble):Label接收到鼠標(biāo)左鍵釋放的冒泡事件。
  • MouseUp for Label (Bubble):Label接收到鼠標(biāo)釋放的冒泡事件。
  • MouseLeftButtonUp for StackPanel (Bubble):StackPanel接收到鼠標(biāo)左鍵釋放的冒泡事件。
  • MouseUp for StackPanel (Bubble):StackPanel接收到鼠標(biāo)釋放的冒泡事件。
  • MouseLeftButtonUp for Window (Bubble):窗口接收到鼠標(biāo)左鍵釋放的冒泡事件。
  • MouseUp for Window (Bubble):窗口接收到鼠標(biāo)釋放的冒泡事件。

通過(guò)這個(gè)事件序列,可以看到鼠標(biāo)單擊事件從窗口頂層元素開始,在隧道傳播階段(Tunnel)逐級(jí)向下,然后在直接傳播階段(Direct)從最深的子元素開始逐級(jí)向上,最后在冒泡傳播階段(Bubble)再次逐級(jí)向上傳播。這個(gè)事件序列反映了鼠標(biāo)單擊事件的路由過(guò)程。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2023-10-30 07:36:19

Spring事務(wù)傳播機(jī)制

2018-08-30 09:15:42

人工智能神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2023-11-02 07:52:30

Java工具

2013-06-24 09:37:34

OSPF協(xié)議SPF算法路由技術(shù)

2023-02-22 13:58:35

2009-02-25 10:42:53

2009-12-22 15:55:10

WCF事務(wù)

2011-08-09 11:45:45

2009-09-24 16:39:20

Hibernate傳播

2010-09-27 09:58:59

2010-10-14 12:00:28

2014-10-13 10:44:43

PCB布線

2012-12-27 14:37:39

2022-10-09 20:52:19

事務(wù)隔離級(jí)別傳播機(jī)制

2022-09-27 15:37:21

深度學(xué)習(xí)算法

2022-09-27 21:14:54

Spring事務(wù)傳播機(jī)制

2025-04-24 10:30:15

2025-04-08 09:20:00

神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練

2020-09-06 08:20:10

區(qū)塊鏈分布式比特幣

2014-03-13 09:16:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)