WPF RichTextBox를 사용하는 워드 프로세서 유형 응용 프로그램에서 작업하고 있습니다.WPF RichTextBox SelectionChanged 성능
private void richTextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
TextSelection selection = richTextBox.Selection;
if (selection.GetPropertyValue(FontFamilyProperty) != DependencyProperty.UnsetValue)
{
//we have a single font in the selection
SelectionFontFamily = (FontFamily)selection.GetPropertyValue(FontFamilyProperty);
}
else
{
SelectionFontFamily = null;
}
if (selection.GetPropertyValue(FontWeightProperty) == DependencyProperty.UnsetValue)
{
SelectionIsBold = false;
}
else
{
SelectionIsBold = (FontWeights.Bold == ((FontWeight)selection.GetPropertyValue(FontWeightProperty)));
}
if (selection.GetPropertyValue(FontStyleProperty) == DependencyProperty.UnsetValue)
{
SelectionIsItalic = false;
}
else
{
SelectionIsItalic = (FontStyles.Italic == ((FontStyle)selection.GetPropertyValue(FontStyleProperty)));
}
if (selection.GetPropertyValue(Paragraph.TextAlignmentProperty) != DependencyProperty.UnsetValue)
{
SelectionIsLeftAligned = (TextAlignment)selection.GetPropertyValue(Paragraph.TextAlignmentProperty) == TextAlignment.Left;
SelectionIsCenterAligned = (TextAlignment)selection.GetPropertyValue(Paragraph.TextAlignmentProperty) == TextAlignment.Center;
SelectionIsRightAligned = (TextAlignment)selection.GetPropertyValue(Paragraph.TextAlignmentProperty) == TextAlignment.Right;
SelectionIsJustified = (TextAlignment)selection.GetPropertyValue(Paragraph.TextAlignmentProperty) == TextAlignment.Justify;
}
}
등 SelectionFontFamily, SelectionIsBold, 각각이다 : 나는 등 어떤 글꼴, 글꼴 두께, 스타일, 다음 코드를 사용하여 RTB의 현재 선택입니다을 파악하기 위해 인 selectionchanged 이벤트를 사용하고 있습니다 바인딩 모드가 OneWayToSource 인 Hosting UserControl의 DependencyProperty입니다. 그것들은 ViewModel에 바인딩됩니다. ViewModel에는 Font 콤보 상자, 굵게, 기울임 꼴, 밑줄 등의 컨트롤이있는 뷰가 있습니다. RTB의 선택 항목이 변경되면 해당 컨트롤도 업데이트되어 선택된 항목을 반영합니다. 이것은 잘 작동합니다.
많은 양의 텍스트를 선택할 때 성능에 영향을 미치지 만 불행히도 작동합니다. 모든 것을 선택하는 것이 눈에 띄게 느리며 Shift + Arrow 키를 사용하여 선택을 변경하는 것은 매우 느립니다. 허용하기에는 너무 느립니다.
내가 잘못 했나요? 프로세스에서 RTB의 성능을 죽이지 않고 RTB에서 선택한 텍스트의 속성을 바운드 컨트롤에 반영하는 방법에 대한 제안이 있습니까? 성능 문제의
귀하의 코드 주셔서 감사합니다. 실제로 속도가 빨라졌지만, RTB에 텍스트가 적당 할 때 (여전히 15 페이지 정도) 꽤 가끔 뒤떨어져 있습니다. 모든 텍스트를 강조 표시하고 화살표 키를 사용하여 줄/단어의 선택을 취소하면 여전히 눈에 띄지 않을 정도로 지연됩니다. 그래서 더 낫지 만 아직 거기에 없습니다. 이와 비슷한 것을 스레드에 넣을 수 있습니까? – Scott
나는 더 빠른 속도 향상을 위해 무엇이 필요한지, 그리고 스레드가 도움이되는지 아닌지에 대한 아이디어를 내 대답으로 확장했다. –
훌륭한 조언, 감사합니다. 레이. 나는 당신에게 제안을 좀 더 자세히 살펴볼 것입니다. – Scott