【问题标题】:uwp: how to pass Button click event to default handleruwp:如何将按钮单击事件传递给默认处理程序
【发布时间】:2021-02-05 21:07:46
【问题描述】:

我想处理 Button Click 事件,做一些事情,然后让默认处理程序执行。

这是我所拥有的:

<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 ...
}

【问题讨论】:

  • 为什么在默认的按钮点击处理程序中不这样做,然后调用另一个函数并将sender和args传递给这个函数?另一个问题是为什么你需要用两种方法来做你的逻辑过程?
  • 请原谅我是 C# 和 UWP 的新手。我不明白你的评论。首先,您指的是什么“两种方法”?其次,我如何在默认按钮单击处理程序中执行此操作 - 您是否建议我将该处理程序子类化?如果是这样,如何。如果你有一个完整的答案,请发帖,我会给你信用:)
  • @PeriHartman:没有“默认处理程序”之类的东西。在OnMoreClicked 事件处理程序中做任何你想做的事情,不要打扰“继续使用默认按钮处理程序”部分。或者你到底想继续做什么?
  • @mm8:显然,我不知道正确的术语(请告知)。我指的是如果我没有声明将执行的处理程序。而且,是的,我确实希望在我的处理程序完成后执行“默认”处理程序。
  • 如果您不订阅该事件,则不会执行默认处理程序。你预计会发生什么?

标签: button uwp event-handling


【解决方案1】:

在显示Flyout 之前调用Click 事件处理程序。

例如,您可以在事件处理程序中更改ButtonBackground

private void onMoreClicked(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    button.Background = new SolidColorBrush(Colors.AliceBlue);
}

...仍然看到Flyout:

您还可以处理MenuFlyoutOpenedOpeningClosedClosing 事件。

或者使用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>

【讨论】:

  • @PeriHartman:这能回答你的问题吗?
  • 是的,但是为什么当我使用 Button.Flyout 时它不起作用?奇怪的是,UWP 不会直接支持这种行为。
  • 什么不起作用?您不能在未设置为 FlyoutBase.AttachedFlyout 属性值的 Flyout 上调用 ShowAttachedFlyout
  • 显然我的直觉是错误的,但我认为 Button.Flyout 是作为 FlyoutBase.AttachedFlyout 实现的。我没有看到它不应该的理由。但显然这是完全不同的东西。
  • FlyoutBase.AttachedFlyout 是一个attached property,可以在任何元素上设置,无论该类是否具有Flyout 属性。
猜你喜欢
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
相关资源
最近更新 更多