Принудительное повторное рендеринг в WPF 4.0 - PullRequest
0 голосов
/ 05 февраля 2011

Я пытаюсь использовать этот код, чтобы заставить мое представление прогресса рисовать перед началом обработки:

public static class ProgressBehaviors
{
    public static readonly DependencyProperty ForceRepaintProperty =
        DependencyProperty.RegisterAttached(
        "ForceRepaint",
        typeof(bool),
        typeof(ProgressBehaviors),
        new UIPropertyMetadata(false, OnForceRepaintChanged));

    public static bool GetForceRepaint(FrameworkElement treeViewItem)
    {
        return (bool)treeViewItem.GetValue(ForceRepaintProperty);
    }

    public static void SetForceRepaint(FrameworkElement treeViewItem, bool value)
    {
        treeViewItem.SetValue(ForceRepaintProperty, value);
    }

    static void OnForceRepaintChanged(DependencyObject a_object, DependencyPropertyChangedEventArgs e)
    {
        Border item = a_object as Border;
        if (item == null)
            return;

        item.IsVisibleChanged += (s, ev) =>
            {
                item.UpdateLayout();
                Window window = Window.GetWindow(item);
                if (window != null)
                    window.Measure(window.RenderSize);
            };
    }
}

Базовое поведение впрыска. Причина, по которой я должен это сделать, заключается в том, что в противном случае сообщение о завершении процесса ожидания не будет отображаться до тех пор, пока оно не выполнит все свои действия. Я пытаюсь UpdateLayout и Measure, и ни один не работает. Все говорят мне, что я делаю что-то не так в WPF. Что, я должен обернуть каждый процесс, который я делаю, во второй поток или вызов Dispatcher? Это кажется некрасивым.

1 Ответ

0 голосов
/ 05 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...