偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

1. 隧道傳播(Tunneling)

隧道傳播是事件從根元素向下傳遞的機制。事件會依次經(jīng)過可視化樹中的每個元素,直到達到事件的原始源。在隧道傳播中,事件處理程序會首先被調(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");
}

使用場景:

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

2. 直接傳播(Direct)

直接傳播是事件沿著可視化樹的路徑上的每個元素進行傳播的機制。它對事件的處理順序沒有要求,只是按照元素在視覺樹中的順序觸發(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");
}

使用場景:

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

3. 冒泡傳播(Bubbling)

冒泡傳播是事件從事件源開始向上傳遞的機制,沿著可視化樹向上冒泡直到達到根元素。在冒泡傳播中,事件處理程序會首先被子級元素調(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; // 停止事件傳播
}

使用場景:

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

鼠標單擊事件序列說明:

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

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

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

2023-10-30 07:36:19

Spring事務(wù)傳播機制

2023-11-02 07:52:30

Java工具

2018-08-30 09:15:42

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

2013-06-24 09:37:34

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

2023-02-22 13:58:35

2010-10-14 12:00:28

2009-02-25 10:42:53

2010-09-27 09:58:59

2009-09-24 16:39:20

Hibernate傳播

2009-12-22 15:55:10

WCF事務(wù)

2011-08-09 11:45:45

2012-12-27 14:37:39

2014-10-13 10:44:43

PCB布線

2022-09-27 15:37:21

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

2022-09-27 21:14:54

Spring事務(wù)傳播機制

2025-04-24 10:30:15

2022-10-09 20:52:19

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

2025-04-08 09:20:00

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

2023-03-03 18:43:18

2010-10-28 14:21:18

點贊
收藏

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