Приложение для замедления обновления текста - PullRequest
1 голос
/ 02 августа 2011

У меня есть приложение для календаря на иврите, где каждый день - UserControl. У меня есть 6 меток в этом элементе управления для английской даты, еврейской даты, еврейских праздников и некоторых других пользовательских данных. При прокрутке содержимое меток изменяется, так как значение даты для UserControl увеличивается или уменьшается на неделю. Прокрутка заметно медленнее, чем в календаре Microsoft Outlook, а профилирование показывает, что самое длинное - это обновление содержимого метки, которое не обрабатывается моим кодом.

Есть ли способ, которым я могу сделать это быстрее? MS Outlook, кажется, имеет сопоставимое количество текстовых полей, и прокрутка плавная.

Ответы [ 3 ]

3 голосов
/ 05 августа 2011

TextBlocks не были заметно быстрее, чем Labels, но Glyphs дал мой удар календаря.

Замена этого

<TextBlock Padding="5"
           FontFamily="Narkisim"
           FontWeight="Bold"
           FontSize="20"
           Text="{Binding HebrewDate}"/>

с этим

<Glyphs Name="HebrewDate"
        Margin="5"
        StyleSimulations="BoldSimulation"
        FontUri = "/Fonts/nrkis.ttf"
        FontRenderingEmSize = "20"
        UnicodeString = "5771 ןושח ה"
        Fill = "Black"/>

сделал прокрутку очень быстрой.

Некоторые заметки:

  1. Glyphs не поддерживают привязку, поэтому мне пришлось дать каждому имя и обновить его в коде, например так:

    HebrewDate.UnicodeString = zman.HebrewDate;
    
  2. Glyphs не имеет функции макета, поэтому текст на иврите выводился задом наперед. Мне пришлось предварительно обработать строки на иврите с функцией реверсирования . Даже после изменения, точки еврейского гласного вышли смещенными, поэтому я сохранил Labels для тех строк, которые используют гласные.

1 голос
/ 02 августа 2011

Я не могу быть уверен, но возможно, что MS Outlook был закодирован во что-то более быстрое, чем WPF, возможно, с использованием DirectX для быстрого отображения графики.

В противном случае я мог бы предложить уменьшить количество обновлений привязок за раз, я бы предложил использовать дополнительный поток для постепенного обновления меток по мере появления резервных циклов вместо всех сразу, что может вызвать ваше заикание.

0 голосов
/ 02 августа 2011

Чтобы согласиться с предыдущим ответом, я рекомендую фонового работника.Используйте фонового работника для наиболее трудоемкой операции, выполняемой во время прокрутки.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

...