2

我在渲染窗口时遇到了一些问题,我想知道是否有一种方法可以设置这些属性的全部或一部分,并且只重绘/渲染一次窗口。

我的问题是我正在渲染 2 个窗口并使它们“附加”,以便它们一致地移动和调整大小。这意味着当我调整/移动一个窗口的大小时,我最终需要进行 4 次渲染调用,而我最多只需要 2 次。

例如,“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--;
    }
}
4

2 回答 2

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() 之类的公共方法来包装它。

于 2012-10-03T16:49:06.643 回答
0

您可以使用 this.SetBounds(this.Left-1, this.Top-1, this.Width-1, this.Height-1) 只调用一次绘制逻辑。

于 2012-10-03T18:10:03.983 回答