Я пытаюсь использовать этот код, чтобы заставить мое представление прогресса рисовать перед началом обработки:
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? Это кажется некрасивым.