我正在尝试使用此代码在处理开始之前强制我的进度视图绘制:
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 调用中吗?这看起来很难看。