2

ウィンドウのレンダリングに問題があります。これらのプロパティのすべてまたはサブセットを設定し、ウィンドウを一度だけ再描画/レンダリングできる方法があるかどうか疑問に思っていました。

私の問題は、2 つのウィンドウをレンダリングし、それらを「接続」して、同時に移動およびサイズ変更することです。これは、1 つのウィンドウのサイズを変更/移動するときに、最大で 2 つしか必要としないはずのレンダリング呼び出しを 4 回行うことになることを意味します。

例として、「Move_Click」メソッドがウィンドウのボタンにアタッチされています。クリックすると、「OnRender」が 2 回呼び出されます。

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) を使用して、描画ロジックを 1 回だけ呼び出すことができます。

于 2012-10-03T18:10:03.983 に答える