我在渲染窗口时遇到了一些问题,我想知道是否有一种方法可以设置这些属性的全部或部分,并且只重绘/渲染一次窗口。
我的问题是,我正在渲染2个窗口并使它们“附加”,以便它们一致地移动和调整大小。这意味着当我调整大小/移动一个窗口时,当我最多只需要2个时,我最终会进行4次渲染调用。
例如,“Move_Click”方法附加到我窗口上的按钮。点击后,最终会两次调用“OnRender”。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnRender(DrawingContext drawingContext)
{
Console.Error.WriteLine("On rendering...");
base.OnRender(drawingContext);
}
private void Move_Click(object sender, RoutedEventArgs e)
{
this.Left--;
this.Top--;
this.Width--;
this.Height--;
}
}
答案 0 :(得分:4)
您可以存储一个标志,表明是否渲染:
public partial class MainWindow : Window
{
private bool suspended;
public MainWindow()
{
this.InitializeComponent();
}
protected override void OnRender(DrawingContext drawingContext)
{
if (suspended)
return;
base.OnRender(drawingContext);
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
suspended = true;
Left = 0;
Top = 0;
Width = 100;
Height = 100;
suspended = false;
this.InvalidateVisual();
}
}
您可以使用SuspendRender()和ResumeRender()等公共方法将其包装。
答案 1 :(得分:0)
你可以使用this.SetBounds(this.Left-1,this.Top-1,this.Width-1,this.Height-1)只调用一次绘制逻辑。