#button #uwp #event-handling
#кнопка #uwp #обработка событий
Вопрос:
Я хотел бы обработать событие нажатия кнопки, что-то сделать, а затем разрешить выполнение обработчика по умолчанию.
Вот что у меня есть:
<Button ... Click="OnMoreClicked" />
И вот мой обработчик
void onMoreClicked (object sender, RoutedEventArgs e)
{
... do something ...
... continue with default button handler ...
}
Редактировать:
Кнопка активирует всплывающее окно, поэтому у нее уже есть обработчик для этого, и я хочу убедиться, что обработчик будет выполнен.
РЕДАКТИРОВАТЬ 2: мой пример кода был слишком минимальным. Вместо этого посмотрите на это:
<Button ... Click="onMoreClicked">
<Button.Flyout >
...
</Button.Flyout>
</Button>
И
public void onMoreClicked (object sender, RoutedEventArgs e)
{
... do something ...
... call default handler to show flyout ...
}
Комментарии:
1. Почему бы не сделать это в обработчике нажатия кнопки по умолчанию, затем вызвать другую функцию и передать отправителю и аргументам этой функции? И еще один вопрос: почему вам нужно выполнять свой логический процесс двумя способами?
2. Простите меня, поскольку я новичок в C # и UWP. Я не понимаю вашего комментария. Во-первых, о каких «двух методах» вы говорите? Во-вторых, как мне это сделать в обработчике нажатия кнопки по умолчанию — вы предлагаете мне подкласс этого обработчика? Если да, то как. Если у вас есть полный ответ, пожалуйста, напишите, и я отдам вам должное 🙂
3. @PeriHartman: не существует такого понятия, как «обработчик по умолчанию». Делайте все, что хотите, внутри своего
OnMoreClicked
обработчика событий и не беспокойтесь о части «продолжить с обработчиком кнопок по умолчанию». Или что именно вы пытаетесь продолжить?4. @mm8: я не знаю правильной терминологии, очевидно (пожалуйста, посоветуйте). Я имею в виду обработчик, который будет выполняться, если я его не объявлю. И, да, я хочу, чтобы обработчик «по умолчанию» выполнялся после завершения моего обработчика.
5. Обработчик по умолчанию не выполняется, если вы не подписаны на событие. Чего вы ожидаете?
Ответ №1:
Обработчик Click
события вызывается перед Flyout
отображением.
Итак, вы, например, меняете Background
значение Button
в обработчике событий:
private void onMoreClicked(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
button.Background = new SolidColorBrush(Colors.AliceBlue);
}
… и все еще видите Flyout
:
Вы также можете обрабатывать Opened
события , Opening
, Closed
или Closing
MenuFlyout
.
Или используйте an AttachedFlyout
и покажите его программно, используя ShowAttachedFlyout
метод:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
//...
Flyout.ShowAttachedFlyout(button);
}
XAML:
<Button Content="Button With Flyout" Click="Button_Click">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Edit" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</Button>
Комментарии:
1. @PeriHartman: Это отвечает на ваш вопрос?
2. Да, но почему это не работает, когда я использую Button. Всплывающее окно? Странно, что UWP напрямую не поддерживает такое поведение.
3. Что не работает? Вы не можете вызвать
ShowAttachedFlyout
aFlyout
, который не задан в качестве значенияFlyoutBase.AttachedFlyout
свойства.4. Видимо, моя интуиция неверна, но я бы предположил, что кнопка. Всплывающий список реализован как FlyoutBase. AttachedFlyout. Я не вижу причин, по которым этого не должно быть. Но, видимо, это что-то совершенно другое.
5.
FlyoutBase.AttachedFlyout
является присоединенным свойством , которое может быть установлено для любого элемента независимо от того, имеет ли классFlyout
свойство.