设置窗口顶部,左侧,宽度和宽度。高度,只重绘一次

时间:2012-10-03 16:30:54

标签: .net wpf c#-4.0

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

我的问题是,我正在渲染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--;
    }
}

2 个答案:

答案 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)只调用一次绘制逻辑。