معرفی
سلام به همه، به یک مقاله جدید خوش آمدید.
در آخرین مقاله در مورد رویدادهای حبابی ، ما همه چیز را در مورد رویدادهای حباب آور یاد گرفتیم، و اکنون شما به من می گویید که یک نوع دیگر از رویدادها وجود دارد: تونل زدن؟ نگران نباشید، رویدادهای تونل زنی دقیقاً برعکس رویدادهای حبابی هستند.
- حباب کردن یک رویکرد از پایین به بالا است. (یعنی از کنترلی که رویداد را به بالاترین کنترل در درخت زنده تصویری راه اندازی می کند.) برای مثال، از دکمه به Window/UserControl. جایی که تونل زنی یک رویکرد بالا به پایین است. یعنی از بالاترین کنترل تا کنترلی که رویداد را فعال می کند. به عنوان مثال، از Window/UserControl به دکمه.
- چگونه در XAML تمایز قائل شویم: هر رویداد تونل سازی با کلمه کلیدی پیش نمایش پیشوند می شود. حباب: MouseDoubleClick، Tunneling: PreviewMouseDoubleClick
این نظریه ممکن است کمی گیج کننده باشد، اما زمانی که جریان اجرای کد را درک کنیم، مشخص خواهد شد. ادامه دهید و یک پروژه WPF جدید ایجاد کنید. در اینجا کاری است که ما می خواهیم انجام دهیم:
- یک برچسب اضافه کنید
- یک دکمه بیرونی به نام OuterButton اضافه کنید
- یک دکمه داخلی در یک دکمه بیرونی به نام InnerButton اضافه کنید.
به این صورت است که MainWindow.xaml شما برای رویدادهای تونل سازی نگاه می کند:
- <Window x:Class="A.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:A"
- mc:Ignorable="d"
- Title="MainWindow" Height="450" Width="800">
- <Grid>
- <Label x:Name="LabelDisplay" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
- <Button x:Name="OuterButton"
- Height="70"
- Width="350"
- PreviewMouseDoubleClick="OuterButton_Click">
- <Button x:Name="InnerButton"
- Content="Inner Button"
- Height="35"
- Width="175"
- PreviewMouseDoubleClick="InnerButton_Click" >
- </Button>
- </Button>
- </Grid>
- </Window>
خیلی خوب - اکنون MainWindow.xaml.cs:
- using System.Windows;
- namespace A
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- private void OuterButton_Click(object sender, RoutedEventArgs e)
- {
- LabelDisplay.Content += "OuterButton Cliked, ";
- }
- private void InnerButton_Click(object sender, RoutedEventArgs e)
- {
- LabelDisplay.Content += "InnerButton Cliked";
- }
- }
- }
این صفحه خروجی است:
![تفاوت بین رویدادهای مسیریابی حباب و تنظیم در WPF، با یک مثال توضیح داده شده است](http://pezhvak24.ir/dl/10kcor/cscd/article/difference-between-bubbling-tunning-routing-events-in-wpf-explained-with-an-e/Images/1.png)
توضیح