2012-01-03 3 views
0

사용자가 마지막 페이지를 삭제 표시하고 해당 사용자가 앱을 다시 방문 할 때 검색하려고합니다. 인터넷상의 모든 삭제 표시 예제는 사용자가 편집 한 일부 데이터 또는 페이지의 상태 (예 : 입력란의 텍스트)를 저장합니다. 내 앱에서는 사용자가 수정/편집 할 수있는 항목이 없으므로 사용자가 마지막으로 방문한 페이지 만 저장하려고합니다. PhoneApplicationService.Current.State를 사용했지만 성공하지 못한 온라인 예제를 사용하려고했습니다.사용자가 마지막으로 방문한 페이지 삭제 표시

이 문제를 해결하는 데 도움을 주신 모든 분들께 감사드립니다!

+1

사용자가 삭제 표시에서 돌아 오면 이미 마지막 페이지로 이동했습니다. 저장할 사용자 지정 데이터가 없으면 아무 것도하지 않고도 작업 할 수 있습니다. – keyboardP

+0

답해 주셔서 감사합니다. 예, 뒤로 버튼으로 작동하지만 사용자가 애플리케이션 아이콘을 눌러 페이지로 다시 돌아올 수 있다면 좋을 것이라고 생각했습니다. 이제 시작 화면이 시작되고 첫 번째 페이지로 이동합니다. 그 일을하는 어떤 방법이 있습니까? –

+1

기술적으로 말하면 사용자가 앱을 다시 시작했음을 의미합니다 (삭제 표시에서 돌아 오는 대신). 이 경우,'PhoneApplicationService.Current '때문에 IsolatedStorage에 써야합니다.State'는 앱이 실행 중이거나 삭제 표시가있는 동안에 만 작동합니다. 앱을 다시 시작하면 '상태'가 지워 지므로 액세스 할 수 없습니다. 잠시 후에 코드를 작성하겠습니다. – keyboardP

답변

3

persistent data (사용자가 앱을 종료해도 남아 있어야하는 데이터)을 로컬에 저장하려면 Isolated Storage을 사용할 수 있습니다.

그래서, 앱의 Deactivated 경우에, 당신은 다음과 같이 격리 된 저장소에 페이지의 이름을 쓸 수 있습니다 :

//You get the Isolated Storage for your app (other apps can't access it) 
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication(); 

//if the file already exists, delete it (since we're going to write a new one) 
if (isf.FileExists("lastpage.txt")) isf.DeleteFile("lastpage.txt"); 
using (var isoFileStream = new IsolatedStorageFileStream("lastpage.txt", FileMode.OpenOrCreate, isf)) 
{ 
     //open a StreamWriter to write the file 
     using (var sw = new StreamWriter(isoFileStream)) 
     { 
      //NavigationService.CurrentSource returns the current page 
      //we can write this to the file 
      sw.WriteLine((Application.Current.RootVisual as PhoneApplicationFrame).CurrentSource.ToString()); 
     } 
} 

이는 격리 된 저장소에 현재 페이지의 이름을 기록합니다. 그런 다음 메인 페이지 (첫 일반적으로 열리는 페이지)의 당신의 OnNavigatedto 방법 당신은 파일 이름을 읽을 수 있고로 이동합니다

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication(); 

    string lastpage = string.Empty; 

    if (isf.FileExists("lastpage.txt")) 
    { 
     using (var isoFileStream = new IsolatedStorageFileStream("lastpage.txt", FileMode.Open, isf)) 
     { 
      //read the file using a StreamReader 
      using (var sr = new StreamReader(isoFileStream)) 
      { 
       //get the uri we wrote and then convert it from a String to a Uri 
       lastpage = sr.ReadLine().Replace("file:///", ""); 

      } 
      } 


      (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(lastpage, UriKind.Relative)); 
     } 
     base.OnNavigatedTo(e); 
} 

이 저장 한 파일을 읽은 다음에 문자열을 변환해야합니다 실제 URI는 NavigationService에 전달할 수 있습니다.

그런 다음 텍스트 파일을 읽은 후에 삭제하면 항상 해당 페이지로 이동하지 않을 수 있습니다.

+0

삭제 해 주셔서 감사합니다! 나는 PhoneApplicationService.Current.State가 사용자가 Start 버튼을 누르고 app 아이콘을 눌러서 app으로 돌아 간다면 작동 할 것이라고 생각했다. 그러나 IsolatedStorage는 이해할 수 있습니다. 나는이 코드를 시도하고 그것이 어떻게되었는지 알려줄 것이다. 다시 한번 감사합니다! –

+0

당신은 환영합니다 :) – keyboardP

+0

텍스트를 편집했습니다. '비활성화 '와'런칭'이벤트 만 필요할 것입니다. – keyboardP

2

또한 당신은 내가 위의 모든 옵션이 가능합니다 동의하지만, 그들은 정말 WP7에서 뭔가를하고 올바른 방법으로하지 않습니다 현재 페이지 이름

1

를 얻기 위해 페이지 이름, string PageName = (Application.Current.RootVisual as PhoneApplicationPage).Name;를 얻기 위해 이것을 사용할 수 있습니다 .

네비게이션을 올바르게 제어하기 위해 앱 시작시 탐색 페이지를 구성하는 것이 더 좋으며 앱을 사용하는 동안 키 이벤트를 관리하고 딸꾹질을 방지하는데도 도움이됩니다. (그럼 그냥 "현재 페이지"상태 값을 저장하기 위해 격리 된 저장소/응용 프로그램 설정 페이지의 예를 들어 값을 값을 저장에 조언을 사용하는 일이와 Properly Exiting Silverlight-based WP7

:

이 구현 한 예를 들어 여기를 참조하십시오 .GamePage) 그러면 앱 탐색에 따라 적절하게 안내됩니다. 그러나 현재 페이지 자체를 저장하는 경우 조심하십시오. 아무런 값이나 사용자가 입력 한 데이터의 올바른 상태를 저장해야 할 필요가있을 때주의하십시오. 위의 조언은 올바른 방향으로 이끌어 줄 것입니다.

희망이 있습니다.

관련 문제