2016-01-19 1 views
0

Я работаю с WP richtextbox.i, выполненным для навигации по каждой строке от текущей позиции каретки до следующей строки, предыдущей и т. Д. Работает отлично. Мне нужно динамически менять шрифты в richtextbox.Приложение Slow After Change fontsize в WPF richtextbox?

я использовал это ниже методы, чтобы изменить размер шрифта:

myrichtextbox.SetValue(TextElement.FontSizeProperty, fontSizedouble +10); 

    myrichtextbox.FontSize = (txtAppendValue.FontSize + 10); 

он works.But после выполнения этой методики, другое время выполнения функциональности принято является high.Before, что NavigateNextLine() принято 15мса к исполнению 20ms.After это занимает от 40 до 50 ms.i, непрерывно вызывает шрифт размером 4,5 раза, тогда NavigateNextLine() занимает 100 мс t0 120 мс.

public void NavigateNextLine() 
{ 
    Int32 lineNumber; 
       txtAppendValue.CaretPosition.GetLineStartPosition(-int.MaxValue, out lineNumber); 
       Int32 iLineIndex = System.Math.Abs(lineNumber); 
       Int32 iCurrentStart = 0; 
       Int32 iCurWordLength = 0; 


       for (Int32 icnt = 0; icnt <= iLineIndex; icnt++) 
       { 
        m_strCurLineText = GetLineText(txtAppendValue.CaretPosition.GetLineStartPosition(lineNumber), 0, null); 
        iCurrentStart = iCurrentStart + m_strCurLineText.Length; 
        lineNumber += 1; 
       } 
    String[] strArr = m_strCurLineText.Split(' '); 
       if (strArr.Length > 0) 
       { 
        iCurWordLength = strArr[0].Length; // Get the first word length of current line 
        if (iCurWordLength == 0) 
        { 
         iCurWordLength = strArr[1].Length; 
         iCurrentStart = iCurrentStart + 1; 
        } 
       } 
       else 
       { 
        iCurWordLength = m_strCurLineText.Length; //to get single word line length 
       } 

       NewStart = iCurrentStart; 
} 





String GetLineText(TextPointer TextPointer, int LineRltv = 0, string Default = null) 
     { 
      TextPointer tp1 = TextPointer.GetLineStartPosition(LineRltv); 
      if (tp1 == null) 
      { 
       return Default; 
      } 
      else 
      { 
       tpNextLine2 = tp1.GetLineStartPosition(1); 

       TextRange tr = null; 
       if (tpNextLine2 == null) 
       { 
        tpNextLine2 = txtAppendValue.Document.ContentEnd; 
       } 
       tr = new TextRange(tp1, tpNextLine2); 
       return tr.Text; 
      } 
     } 

И в чем проблема? Как ее решить?

рассматривает Арджун

+0

разместить свой код для остальной функциональности – Muds

+0

@ грязей: Проверьте это сейчас. –

ответ

0

Оба должны работать:

txtAppendValue.ApplyPropertyValue(TextElement.FontSizeProperty, (double)10); 

ИЛИ

txtAppendValue.ApplyPropertyValue(TextElement.FontSizeProperty, 10.0) 
+0

@ Vivek: Оба должны работать. Проблема в том, что после выполнения этой еще одной скорости выполнения функции slow.i тоже попробовал это. –

+0

@arjun ok должен найти решение – CodeConstruct