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

时间:2013-01-22 20:50:44

标签: c# winrt-xaml windows-store-apps

我有这个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));
}

2 个答案:

答案 0 :(得分:4)

Click与Tap相同。你应该寻找一个名为Tapped的事件,并为它创建一个OnTapped处理程序。

我的猜测就是你的问题。事件没有冒泡,因为在LayoutAwarePage.cs中事件被设置为处理。

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

答案 1 :(得分:1)

使用Tapped事件代替处理点击,点击和手写笔事件,而Click专门处理鼠标(有关详细信息,请参阅this answer)。

Here's一些关于他们如何尝试统一围绕触摸的不同指向输入模式的事件的信息。