首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从LensPicker导航到CameraCaptureTask

如何从LensPicker导航到CameraCaptureTask
EN

Stack Overflow用户
提问于 2013-10-16 03:40:31
回答 2查看 115关注 0票数 0

我已经创建了一个小的样例镜头应用程序,我希望当在默认相机应用程序中单击镜头图标时,能够直接导航到CameraCaptureTask。在我的应用程序中,在正常的应用程序操作期间,我已经在按钮单击事件中调用了CameraCaptureTask。我如何从LensPicker选项中将其设置为同样有效?

我一直在引用http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662936(v=vs.105).aspx

LensExampleUriMapper.cs

代码语言:javascript
复制
private string tempUri;

public override Uri MapUri(Uri uri)
{
    tempUri = uri.ToString();

    // Look for a URI from the lens picker.
    if (tempUri.Contains("ViewfinderLaunch"))
    {
        // Launch as a lens, launch viewfinder screen.
        return new Uri("/MainPage.xaml", UriKind.Relative);
    }

    // Otherwise perform normal launch.
    return uri;
}

我在考虑在return new Uri("/MainPage.xaml", UriKind.Relative);中传递一个QueryString值,以便在我的MainPage OnNavigatedTo事件中可以检查该QueryString值并调用CameraCaptureTask,然后将结果路由到我已经创建的现有事件处理程序(它在MainPage中显示结果图像)。由于某些原因,我在尝试创建要传递的QueryString时出现调试错误,但我不确定原因是什么?

编辑**不再报错,但在调用CameraCaptureTask时会出现无限循环。为什么?

LensExampleUriMapper.cs

代码语言:javascript
复制
private string tempUri;

public override Uri MapUri(Uri uri)
{
    tempUri = uri.ToString();

    // Look for a URI from the lens picker.
    if (tempUri.Contains("ViewfinderLaunch"))
    {
        // Launch as a lens, launch viewfinder screen.
        return new Uri("/MainPage.xaml?fromLensPicker=" + "fromLensPicker", UriKind.Relative);
    }

    // Otherwise perform normal launch.
    return uri;
}

MainPage.xaml.cs

代码语言:javascript
复制
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string fromLensPicker = null;
    if (NavigationContext.QueryString.TryGetValue("fromLensPicker", out fromLensPicker))
    {
        if (fromLensPicker == "fromLensPicker")
        {
            newButton_Click(null, null);  //click event that calls CameraCaptureTask
            fromLensPicker = null; //Temporarily nullifies value until MainPage is OnNavigatedTo after CameraCaptureTask completes
        }
    }
}

我相信当调用CameraCaptureTask时,应用程序会被逻辑删除,然后在MainPage上恢复,在这个过程中,QueryStringfromLensPicker == "fromLensPicker"和整个循环都会重复地重新开始。我该如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

发布于 2013-10-16 17:04:20

在MainPage中使用NavigationMode属性。我想你不能清除QueryString。但是您可以检查页面导航是如何发生的,以了解它是否从CameraCaptureTask返回

代码语言:javascript
复制
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if(e.NavigationMode == NavigationMode.New)
    // continue further
}

代码语言:javascript
复制
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if(e.NavigationMode == NavigationMode.Back)
    return;

    // else continue further
}
票数 0
EN

Stack Overflow用户

发布于 2013-10-17 01:10:15

我没有在MainPage.xaml.cs中创建fromLensPicker = null,而是使用了从WP7 Navigation with parameters引用的NavigationContext.QueryString.Remove("fromLensPicker")

MainPage.xaml.cs

代码语言:javascript
复制
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string fromLensPicker = null;
    if (NavigationContext.QueryString.TryGetValue("fromLensPicker", out fromLensPicker))
    {
        if (fromLensPicker == "fromLensPicker")
        {
            NavigationContext.QueryString.Remove("fromLensPicker");                           
            //Perform Action           
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19389626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档