为什么我的事件处理程序不会被调用

本文关键字:调用 程序 我的 事件处理 为什么 | 更新日期: 2023-09-27 17:55:22

我有这个xaml:

<Button VerticalAlignment="Bottom"
        Click="SaveAndGoBack"
        IsEnabled="{Binding Frame.CanGoBack,
                            ElementName=pageRoot}"
        Style="{StaticResource BackButtonStyle}" />

。但是在"点击"(单击)后退按钮时,虽然它确实返回到上一页,但没有调用SaveAndGoBack() - 我在第一行有一个断点,但没有到达。

该按钮显然已启用,因为我可以选择它并"返回"。那么为什么无法访问事件处理程序呢?

更新

将单击更改为点击没有区别。这是现在的 XAML:

<Button VerticalAlignment="Bottom"
        Tapped="SaveAndGoBack"
        IsEnabled="{Binding Frame.CanGoBack,
                            ElementName=pageRoot}"
        Style="{StaticResource BackButtonStyle}" />

。这就是方法,第一行有一个断点,永远不会到达(但主页返回到):

private async void SaveAndGoBack(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs args)
{
    SOs_Locations sos_locs = new SOs_Locations { GroupName = txtbxGroup.Text };
    int locNum;
    int.TryParse(txtbxLocationNum.Text, out locNum);
    sos_locs.LocationTitle = txtbxTitle.Text;
    sos_locs.CivicAddress = txtbxAddress.Text;
    double lat;
    double.TryParse(txtbxLatitude.Text, out lat);
    sos_locs.Latitude = lat;
    double lng;
    double.TryParse(txtbxLongitude.Text, out lng);
    sos_locs.Longitude = lng;
    if (cmbxDisplayColor.SelectedValue != null)
        sos_locs.LocationColor = cmbxDisplayColor.SelectedValue.ToString();
    await SQLiteUtils.UpdateLocationAsync(sos_locs);
    Frame.Navigate(typeof(MainPage));
}

为什么我的事件处理程序不会被调用

Click是与 Tap 不同的事件。 您应该查找一个名为 Tapped 的事件,并为其创建 OnTapped 处理程序。

我的猜测是针对您的问题。事件没有冒泡,因为在 LayoutAwarePage 中.cs事件设置为已处理。

您可以修改此页面以满足您的需求。查找 CoreWindow_PointerPressed 方法并查找它设置的区域args.Handled = true

改用 Tap 事件,因为它处理单击、点击和触笔事件,而 Click 专门处理鼠标(有关更多详细信息,请参阅此答案)。

以下是有关他们如何尝试围绕触摸的不同指向输入模式统一事件的一些信息。