4

Windows 8 앱에서 키가 큰 HTML 페이지를 안정적으로 스크롤하는 방법을 찾고 있습니다. 내가 만들고있는 응용 프로그램은 패키지의 XML 파일에서 HTML 형식의 텍스트를 가져 와서 현재 SplitPage의 한면에 WebView에 표시합니다.Windows 8에서 WebView의 스크롤링 문제

이 모든 것이 정상적으로 작동하지만 WebView의 작동 방식 때문에 스크롤하는 데 집중해야하는 문제가 있습니다. WebView가 포함 된 SplitPage를 처음로드하면 WebView에 스크롤 휠이있는 포커스가 있고 예상대로 작동하지만 다른 항목이 포함 된 ListView는 스크롤 휠을 클릭해도 스크롤되지 않습니다. 사용자가 홈 화면으로 돌아가서 동일한 SplitPage로 돌아 가면 WebView를 스크롤 휠로 스크롤 할 수 없습니다.

WebViewBrush를 사용하여 보았습니다. 그러나 제가 시도한 것에서는 저에게 효과가 없을 것이라고 생각합니다. WebView를 화면에 표시하지 않거나 축소 한 다음 화면의 사각형에 WebViewBrush를 그릴 수있는 방법이없는 것 같습니다.

다른 방법으로 데이터를 표시하거나 WebView 또는 WebViewBrush를 사용하여 멋진 결과를 얻으려면 아이디어가 필요하십니까?

+0

WebView는 ListView 안에 있습니까? –

+0

ScrollViewer 내부의 Grid 안에 있습니다. – Jonathan

답변

0

이것이 작동하지 않고 HTML이 임의적이지 않은 경우 HTML을 구문 분석하고 XAML 플랫폼의 네이티브 컨트롤을 사용하여 HTML을 재구성 해 볼 수 있습니다. 상자에서 꺼내는 프로젝트가 있는지 확실하지 않지만 HTML Agility Pack이 도움이 될 수 있습니다.

+0

CSS를 어떻게 적용 하시겠습니까? –

+0

구문 분석해야합니다. HTML 민첩성 팩이 그것을 수행하는지 (결코 사용하지 않음) 확실하지 않습니다. HTML이 임의의 HTML 인 경우 WebView/WebViewBrush로 렌더링하거나 CSS를 무시하는 것이 좋습니다. –

1

웹 페이지 컨트롤이 루트 페이지에서 제대로 작동하지만 여러 탐색 시나리오에 포커스를 유지하는 데 어려움이있는 것 같습니다. 이 문제를 해결하는 데 사용한 해결 방법입니다.

먼저 탐색 매개 변수로 전달할 새 클래스를 만들었습니다.

class DetailPayload 
{ 
    public Frame DetailFrame { get; set; } 
    public string Title { get; set; } // may not be important to your software 
} 

문제가있는 webview가있는 페이지로 이동하여 DetailPayload 객체를 전달할 때 새 루트 프레임을 만듭니다.

DetailPayload dpl = new DetailPayload(); 
dpl.DetailFrame = this.Frame; 
dpl.Title = itemTitle; 

Frame rootFrame = new Frame(); 
rootFrame.Navigate(typeof(DetailPage), dpl); 

Window.Current.Content = rootFrame; 
Window.Current.Activate(); 

탐색 할 페이지의 '프레임 backFrame'에 이전 프레임을 저장합니다.

DetailPayload dpl = (DetailPayload)navigationParameter; 
this.backFrame = dpl.Frame; 

뒤로 단추 컨트롤을 변경하여 다른 이벤트를 발생시키고 루트 프레임 인 경우이를 비활성화하는 부분을 삭제합니다.

<Button x:Name="backButton" Style="{StaticResource BackButtonStyle}" Click="backButton_Click"/> 

그런 다음이 코드를 backButton_Click 함수에서 호출하여 이전 페이지로 돌아갑니다.

Window.Current.Content = this.backFrame; 
Window.Current.Activate(); 

실제로 컨트롤이 아니기 때문에 webview가있는 모든 페이지에서이 작업을 수행해야하므로 .Focus() 메서드가 없어졌습니다.