2013-10-15 63 views
0

我已經創建了一個小樣本Lens應用程序,並且我希望能夠在默認相機應用程序中單擊鏡頭圖標時直接導航到CameraCaptureTask。在我的應用程序中,我已經在正常應用程序操作期間在按鈕點擊事件中調用了CameraCaptureTask。我怎樣才能設置這個以及從LensPicker選項中工作?如何從LensPicker導航到CameraCaptureTask

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

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

我想在我的MainPage OnNavigatedTo事件return new Uri("/MainPage.xaml", UriKind.Relative);使傳遞查詢字符串值,我可以檢查查詢字符串值,然後調用CameraCaptureTask,然後將結果路由到已創建的事件處理程序(它在MainPage中顯示結果圖像)。出於某種原因,我在嘗試創建QueryString傳遞時遇到調試錯誤,而我不確定爲什麼?

編輯**不再收到錯誤,但調用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?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 
     } 
    } 
} 

我相信,當CameraCaptureTask被調用時,應用程序邏輯刪除,然後重新上的MainPage,其中QueryStringfromLensPicker == "fromLensPicker"整個週期重複開始。我該如何解決這個問題?

+0

您是否可以在發生QueryString錯誤的位置包含代碼? – codechinchilla

+0

實際上,我沒有正確檢查'tempUri'的值,它包含的字符串比我在檢查是否只導航到MainPage或插入查詢字符串之前檢查的字符串更多。 – Matthew

+0

其實我注意到我得到一個調用CameraCaptureTask的按鈕單擊事件的無限循環,因此永遠無法離開任務。我編輯了我原來的帖子來反映這一點。它必須處理我相信的墓碑。一旦頁面被導航到並檢索它們,我如何才能清除查詢字符串值,以便在從CameraCaptureTask返回同一頁面時不再存在? – Matthew

回答

0

在MainPage中使用NavigationMode屬性。我認爲你不能清除QueryString。但你可以檢查如何導航到您的網頁發生知道,如果它從CameraCaptureTask

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

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if(e.NavigationMode == NavigationMode.Back) 
    return; 

    // else continue further 
} 
0

而是在MainPage.xaml.cs使fromLensPicker = null的恢復,我現在有NavigationContext.QueryString.Remove("fromLensPicker")WP7 Navigation with parameters

引用

MainPage.xaml.cs

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