PhotoChooserTask 后未触发 ApplicationBar 图标按钮单击事件

2024-04-23

我无法在某些条件下触发 ApplicationBarIconButton 的单击事件。

我尝试简化重现它所需的步骤:

1)创建一个新的Windows Phone应用程序

2)添加新页面(Page1.xaml)

3) 在 MainPage.xaml 上添加一个简单的按钮,启动 PhotoChooserTask 并在 Completed 事件上导航到 Page1.xaml

public partial class MainPage : PhoneApplicationPage
{
    PhotoChooserTask photo;

    public MainPage()
    {
        InitializeComponent();
        photo = new PhotoChooserTask();
        photo.Completed += OnCameraCaptureTaskCompleted;
    }

    void OnCameraCaptureTaskCompleted(object sender, PhotoResult args)
    {
        this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        photo.Show();
    }
}

6) 取消注释 Page1.xaml 的 ApplicationBar 部分,并将其中一个按钮的单击事件设置为新的事件处理程序

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True">
        <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Won't work" Click="ApplicationBarIconButton_Click" />
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

    private void ApplicationBarIconButton_Click(object sender, EventArgs e)
    {
        MessageBox.Show("This messagebox won't show!");
    }

启动它

单击按钮选择图片 => 您将被重定向到 Page1.xaml

单击 ApplicationBarIconButton 按钮:事件未触发!

我错过了什么或者这是一个错误吗?


经过一番挖掘后,这是由于已完成的事件中出现了一些奇怪的行为。

作为解决方法,您可以强制已完成事件中的导航在 UI 线程上运行,一切正常。

    void OnCameraCaptureTaskCompleted(object sender, PhotoResult args)
    {
        Dispatcher.BeginInvoke(() =>
              this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative)));
    }

在已完成的活动中您可以做的事情也有其他限制。意识到这一点很重要!

这种行为可能(希望是)有充分的理由,但需要更好地记录下来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PhotoChooserTask 后未触发 ApplicationBar 图标按钮单击事件 的相关文章

随机推荐