Как мне остановить перенаправленное событие в определенных местах в XAML? - PullRequest
2 голосов
/ 12 марта 2010

У меня следующая ситуация:

Панель стека содержит несколько элементов, в том числе те, которые содержатся в GroupBox. Вот как то так:

<StackPanel x:Name="stackpanel" Background="White">
    <TextBlock Text="TextBlock"/>
    <TextBlock Text="Another TextBlock"/>
    <!--plus a load of other elements and controls-->

    <GroupBox Header="GroupBoxHeader">
        <TextBlock Text="Text inside GroupBox"/>
    </GroupBox>

</StackPanel>

Я хочу, чтобы MouseDown в панели стека запускал раскадровку, поэтому я добавил EventTrigger, например:

<EventTrigger RoutedEvent="Mouse.MouseDown" SourceName="stackpanel">
    <BeginStoryboard Storyboard="{StaticResource OnMouseDown1}"/>
</EventTrigger>

Это почти правильно, но дело в том - я не хочу, чтобы MouseDown выбирался заголовком или рамкой GroupBox, а только его содержимым. Другими словами, я хочу, чтобы раскадровка начиналась, когда кто-то делает нарезку на что-либо внутри StackPanel, кроме заголовков и границ GroupBox.

Есть ли способ сделать это? (Я попытался установить e.Handled в true на GroupBox, но затем его содержимое больше не поднимает mousedown.)

1 Ответ

5 голосов
/ 12 марта 2010

Вы на правильном пути. В обработчике GroupBox установите e.Handled на true, только если это не один из параметров, которые вы хотите активировать. Простой трюк для этого заключается в том, что отправитель - это объект, которому вы назначили обработчик, а e.Source - то, где событие фактически произошло. Например, если я сделаю это:

    private void GroupBox_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.Source.Equals(sender))
        {
            //It comes from the groupbox, including the header
            e.Handled = true;
        }
        else
        {
            e.Handled = false;
        }
    }

Событие достигает родителя, только если оно пришло от одного из потомков GroupBox. Те, которые происходят с самого GroupBox (включая заголовок), подавляются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...