Почему не делает пузыря “события нажатия кнопки визуальное дерево” к StackPanel как состояния статьи MSDN?

Кажется, что, несмотря на утверждение документа о Content-Type заголовках, является необязательным, они не являются. Как предложено в этой публикации SO и в этом выпуске github , добавление contentType к аргументу опций getSignedUrl решает проблему:

file.getSignedUrl({
  action: 'read',
  contentType: 'audio/wav',
  expires: moment()
  .add(10, 'minutes')
  .format()
})

Убедитесь, что также включайте заголовок при запросе ресурса.

21
задан Arcturus 11 January 2019 в 06:34
поделиться

4 ответа

Пузыри события, пока это не обрабатывается...

, Так как Кнопка делает что-то Вашими щелчками мышью, она поглощает Ваше событие от нажатия мыши и превращает его в ClickEvent.

при использовании PreviewMouseDown Вы видите, что StackPanel сначала получает событие, прежде чем кнопка сделает.. События предварительного просмотра используют Туннель, вниз приближаются..

25
ответ дан 29 November 2019 в 20:25
поделиться

Как другие сказали, это - потому что MouseDown событие обрабатывается Button, прежде чем это сможет пузыриться далее. Вы видите это в Отражателе, в ButtonBase.OnMouseLeftButtonDown:

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    if (this.ClickMode != ClickMode.Hover)
    {
        e.Handled = true;
        // SNIP...
    }
    base.OnMouseLeftButtonDown(e);
}

Одно решение состоит в том, чтобы прислушаться MouseDown событие и указать, что Вы не заботитесь, обрабатывается ли событие. Можно сделать это с AddHandler метод. Это имеет булеву перегрузку, которая позволяет Вам прислушаться к событиям, которые уже обрабатываются.

, Если Вы делаете это где-нибудь вместо того, чтобы установить обработчик MouseDown в XAML:

TheStackPanel.AddHandler(MouseDownEvent, new MouseButtonEventHandler(TheStackPanel_MouseDown), true);

Вы получите весь MouseDown события на TheStackPanel, независимо от того, были ли они обработаны.

8
ответ дан 29 November 2019 в 20:25
поделиться

Кроме того, если Вы хотите, чтобы stackpanel получил событие, изменил stackpanel xaml на:

<StackPanel x:Name="TheStackPanel" 
            Background="Yellow"
            Button.Click="TheStackPanel_MouseDown" />

и подпись события к:

private void TheStackPanel_MouseDown(object sender, RoutedEventArgs e)

В этом случае, stackpanel получит событие щелчка кнопки. Однако нажатие на сам stackpanel не запустит события, так как это слушает конкретно нажатие кнопки.

7
ответ дан 29 November 2019 в 20:25
поделиться

Это - потому что все сообщения получаются <ударяют> обработанный Кнопкой и остановкой сообщений <забастовка> остановки сообщения пузырящийся там. Ответ является правильным в тексте Вашего вопроса:

событие будет пузыриться (распространяют) визуальное дерево от исходного элемента , пока или это не было обработано , или это достигает корневого элемента.

РЕДАКТИРОВАНИЕ:

Edward Tanguay (OP) прокомментировал этот ответ, и я копирую его комментарий здесь, потому что это очень релевантно:

"Я не вижу, что кнопка IS, обрабатывающая событие, т.е. у Меня нет обработчика щелчков на кнопке, у меня ДЕЙСТВИТЕЛЬНО есть обработчик щелчков (MouseDown) на StackPanel, и следовательно я думал бы, что это будет пузыриться МИМО кнопки, так как кнопка не обрабатывает его и обрабатывается stackpanel, который делает, правильно?"

Вы правы. Кнопка не обрабатывает Событие mouseDown, потому что никакой обработчик, ха, не определил для него при том управлении.

, Но, тогда, MouseDown конкретен в некотором роде. По крайней мере, в Windows Forms это используется для инициирования действий как рисования и перетаскивания так, когда управление получает событие, это продолжает захватывать все последующие сообщения мыши, даже если Вы не определили обработчики для него. Это прерывание сделано, когда управление устанавливает свойство Capture на Истинный, и это эффективно мешает последующим событиям пузыриться. Свойство получения задержано ко Лжи Windows Forms, когда это получает Событие mouseUp.

я повторяюсь, это - способ, которым это работает в Windows Forms, можно хотеть перепроверить это, но, по моему скромному мнению, нет никакой причины, почему это должно отличаться для WPF.

Для ссылки: Se раздел "Windows Forms processing" в http://blogs.msdn.com/jfoscoding/archive/2005/07/28/444647.aspx (прокручивают немного вниз с середины страницы).

Примечание: См. мой комментарий к ответу Arcturu для ссылки на пузыре и туннелирующих последовательностях повышения событий.

2
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: