C# 如何从LensPicker导航到CameraCaptureTask

C# 如何从LensPicker导航到CameraCaptureTask,c#,windows-phone-8,C#,Windows Phone 8,我已经创建了一个小示例镜头应用程序,我希望在默认相机应用程序中单击镜头图标时能够直接导航到CameraCaptureTask。在我的应用程序中,我已经在正常应用程序操作期间的按钮单击事件中调用了CameraCaptureTask。我怎样才能通过LensPicker选项将其设置为同样有效 我一直在引用 LensExampleUriMapper.cs private string tempUri; public override Uri MapUri(Uri uri) { tempUri

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

我一直在引用

LensExampleUriMapper.cs

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;
}
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;
}
我想在
返回新Uri(“/MainPage.xaml”,UriKind.Relative)中传递一个QueryString值
以便在我的主页
on NavigatedTo
事件中,我可以检查QueryString值并调用CameraCaptureTask,然后将结果路由到我已创建的现有事件处理程序(该处理程序在主页中显示生成的图像)。由于某种原因,我在尝试创建要传递的查询字符串时遇到调试错误,我不确定原因是什么

编辑**不再获取错误,但调用CameraCaptureTask时发生无限循环。为什么?

LensExampleUriMapper.cs

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

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

我相信,当调用
CameraCaptureTask
时,应用程序会被删除,然后在主页上恢复,其中
QueryString
fromspicker==“fromspicker”
,整个循环会重复地重新开始。如何解决此问题?

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

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if(e.NavigationMode == NavigationMode.New)
    // continue further
}


MainPage.xaml.cs
中,我不再使用
fromspicker=null
,而是使用了
NavigationContext.QueryString.Remove(“fromspicker”)
,引用自

MainPage.xaml.cs

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

你能把发生查询字符串错误的代码包括进来吗?实际上,我没有正确地检查
tempUri
的值,它包含的字符串比我在决定是导航到MainPage还是插入querystring之前检查的更多。事实上,我已经注意到,我得到一个无限循环,调用我的button click事件,调用CameraCaptureTask,因此永远无法退出任务。我编辑了我的原始帖子以反映这一点。我相信它必须处理墓碑问题。一旦页面被导航到并检索到querystring值,如何清除这些值,使它们在从CameraCaptureTask返回同一页面时不再存在?