WPF - понимание RoutedEvents - PullRequest
       28

WPF - понимание RoutedEvents

0 голосов
/ 25 сентября 2010

Привет, я изучаю WPF и сейчас читаю о RoutedEvents.В книге "Pro WPF в c #" есть фрагмент кода, который я представляю ниже

<Window x:Class="RoutedEventsLearning.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" MouseUp="SomethingClicked" >
    <Grid Margin="3" MouseUp="SomethingClicked">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Label Margin="5" Grid.Row="0" HorizontalAlignment="Left"
Background="AliceBlue" BorderBrush="Black" BorderThickness="1"
MouseUp="SomethingClicked">
            <StackPanel MouseUp="SomethingClicked">
                <TextBlock Margin="3"
MouseUp="SomethingClicked">
Image and text label</TextBlock>
                <Image  Stretch="None"
MouseUp="SomethingClicked" />
                <TextBlock Margin="3"
MouseUp="SomethingClicked">
Courtesy of the StackPanel</TextBlock>
            </StackPanel>
        </Label>
        <ListBox Grid.Row="1" Margin="5" Name="lstMessages"></ListBox>
        <CheckBox Grid.Row="2" Margin="5" Name="chkHandle">
            Handle first event</CheckBox>

    </Grid>
</Window>

Дело в том, что я не вижу разницы / преимущества маршрутизируемых событий (судя по этому примеру).В обычном C # я делал бы то же самое - добавлял обработчик к каждому элементу в моей форме (как это было сделано здесь).

Сначала, когда я читал о перенаправленных событиях, кажется, что это работает именно так.Я добавляю обработчик событий для родителя всех визуальных элементов в моей форме / элементе управления / окнах.Если я нажимаю на child, событие mousedown поднимается и проходит через визуальное дерево.Если событие достигает сетки, вызывается обработчик события.Однако я был неправ или я поступил неправильно.Может ли кто-нибудь объяснить мне разницу между обычными событиями и перенаправленными событиями

Править Что-то странное происходит при вставке кода.Из всего фрагмента кода я получаю только тег

Ответы [ 2 ]

0 голосов
/ 26 сентября 2010

Дело в том, что я не вижу разницы / преимущества маршрутизируемых событий (судя по этому примеру). В обычном C # я делал бы то же самое - добавлял обработчик к каждому элементу в моей форме (как это было сделано здесь).

Цель примера - показать, как пометка события как обработанного влияет на поведение маршрутизации. Если вы установите флажок «Обрабатывать первое событие», а затем щелкните один из внутренних элементов управления, событие будет инициировано только для этого элемента управления. Если вы снимите флажок, он будет поднят на каждом элементе управления в визуальном дереве.

Единственная причина, по которой автор примера обрабатывает событие для каждого объекта в дереве, - это продемонстрировать это. Обычно вы бы этого не делали; Вы бы просто обработали событие на самом высоком полезном уровне.

0 голосов
/ 25 сентября 2010

Не уверен, что вы имеете в виду. RoutedEvents может перемещаться вверх или вниз по визуальному дереву на основе RoutingStrategy. По умолчанию для RoutingStrategy установлено значение Bubble (переход от дочернего элемента к родительскому).

Я попробовал ваш код, и он, кажется, ведет себя как ожидалось. Нажав на «Изображение и текстовую метку», он направляет визуальное дерево: TextBlock -> StackPanel -> Label -> Grid

...