2016-08-22 1 views
1

UWP 프로젝트에 RichTextBlock이 있는데, 긴 문자열을 내용으로 설정하면 3 초 같은 콘텐츠가 표시되는 데 오래 걸립니다. 웹을 검색 한 결과 virtualization이 없기 때문에 모든 콘텐츠를 렌더링하려고합니다. WPF 및 RichTextBox에 문제가있는 것 같습니다.긴 문자열에 의한 RichTextBlock의로드가 느림

시각적 콘텐츠 만 렌더링하려면 어떻게해야합니까?

+0

문자열은 얼마나 걸립니까? 나는 12000 개의 문자열로 테스트를했고, 즉시 버튼을 눌러 렌더링합니다. –

+0

Visual Studio 프로파일 러를 사용하여 시간이 오래 걸리는 것을 확인하십시오. 3 초가 너무 깁니다 .. 디버그 대신 릴리스 모드에서 실행되도록 변경되었는지 확인하십시오. –

답변

1

나는 단락별로 내용을 분할하고 각각을 ListView에 separetly로 렌더링합니다.

<ListView> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <RichTextBlock /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

나는 긴 단락을 복수로 가지고 있지 않다. – Maryam

+0

@Maryam 어쩌면 하나의 정말로 긴 단락을 가져서는 안된다. – Paparazzi

+0

나는 테스트를하고 36000 + 문자로 추가하고 여전히 즉시 렌더링했습니다. 예외가 준 42000 문자 문자열입니다. 따라서 코드가 느려지는 –

0

긴 문자열을 작은 문자열 목록 List<string> strList으로 변환하십시오. ScollViewer가 끝날 때마다 더 많은 텍스트가로드됩니다 (같은 단락에서).

<ScrollViewer Name="Scroll" 
      ViewChanged="Scroll_OnViewChanged"> 
     <StackPanel> 
      <RichTextBlock> 
       <Paragraph x:Name ="P"></Paragraph> 
      </RichTextBlock> 
     </StackPanel> 
    </ScrollViewer> 

.

private void Scroll_OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e) 
      { 
       var scroller = (ScrollViewer) sender; 

       if (scroller.ScrollableHeight-scroller.VerticalOffset > 5) return;  
       if (pointer >= strList.Count) return; 

       var run = new Run {Text = strList[pointer++]}; 

       P.Inlines.Add(run); 
      } 

pointer 유형 int 단지 개인 클래스 필드입니다.

+0

검색 페이지가 있고 어쩌면 페이지 끝으로 가고 싶기 때문에이 페이지는 다시 느립니다. – Maryam

관련 문제