2016-08-23 4 views
0

메모 앱을 직접 만들려고합니다. 나는 그 응용 프로그램이 여러 페이지를 가지기를 원하며 각각은 각각의 'InkCanvas'를 가지고있다. 나는 이것을 관리했지만, 페이지를 떠날 때마다 'InkStrokes'의 'collection/list'가 지워집니다.잉크 스트로크 받기 및 추가

내 솔루션은 '잉크 스트로크'목록을 만드는 것입니다. 해당 목록을 pages.xaml.cs에 저장 한 다음 페이지를 다시 탐색 할 때마다 해당 목록을 'InkCanvas'에로드하십시오. 나는 또한 운없이 시도했습니다

var strokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); 

     foreach (var stroke in strokes) 
     { 
      inkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke); 

     } 

을 :

private IEnumerable<InkStroke> pageStrokes; 

     pageStrokes = new IEnumerable<InkStroke> //Line continues 
     inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); 

     inkCanvas.InkPresenter.StrokeContainer.AddStrokes(pageStrokes); 

나는 의심 내 문제가 불일치로 인해 여기

내가 먼저 스트로크를 가져온 다음 다시 추가하려고 데이터 유형 누구나이 문제에 대해 가능한 해결책과 이유가 무엇인지 설명 할 수 있다면 매우 도움이 될 것입니다.

사전에 친절한 인터넷 낯선 사람에게 감사드립니다.

답변

1

내 솔루션은 '잉크 스트로크'목록을 만드는 것입니다. 해당 목록을 pages.xaml.cs에 저장 한 다음 페이지를 다시 탐색 할 때마다 해당 목록을 'InkCanvas'에로드하십시오.

Strokes 대신 StrokeContainer을 저장할 수 있습니다. 나는 기본 데모를 만들고 StrokeContainer을 응용 프로그램 리소스에 저장하고 OnNavigatedTo에로드하면 작동합니다.

MainPage.xaml.cs를 : SaveStrokeSample : 여기

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    //if the mainpage resource exists then load the container 
    if (Application.Current.Resources.ContainsKey("mainpage")) 
    { 
     var resource = Application.Current.Resources["mainpage"]; 
     myCanvas.InkPresenter.StrokeContainer = (InkStrokeContainer)resource; 
    } 
} 
//I save the StrokeContainer in a button click event 
private void myBtn_Click(object sender, RoutedEventArgs e) 
{ 
    Application.Current.Resources.Add(new KeyValuePair<object, object>("mainpage", myCanvas.InkPresenter.StrokeContainer)); 
} 

그리고 내 데모 프로젝트입니다.

+0

감사합니다. 아이러니하게도 나는 방금 해결책을 찾았고 나의 대답을 올리려고 왔지만 이것은 훨씬 더 깨끗하고 쉬웠다. 내 것은 별도의 strokecontainer, 유형 변환을위한 여러 행 및 다른 혼란을 포함합니다. 너 멋지다! – Magnus