WPF UIElement刷新bug?

时间:2012-04-18 09:04:42

标签: c# .net wpf wpf-controls uielement

我有一个自定义面板,用于绘制选择效果;但有时它不会清除以前的矩形,如果鼠标在屏幕足够大时来回移动(跨两个监视器),是WPF错误还是限制?你知道如何解决这个问题吗?提前谢谢。

简化代码如下所示

public class CustomPanel : Panel
{
    private Rectangle _rectangle;

    public CustomPanel()
    {
        this._rectangle = new Rectangle();
        this._rectangle.StrokeThickness = 3;
        this._rectangle.Stroke = new SolidColorBrush(Color.FromArgb(220, 0, 0, 0)); ;
        this.Children.Add(this._rectangle);
    }            

    protected override Size MeasureOverride(Size availableSize)
    {
        this._rectangle.Measure(availableSize);
        return this._rectangle.DesiredSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        if (!finalSize.IsEmpty)
        {
            this._rectangle.Arrange(new Rect(new Point(0, 0), finalSize));
        }
        return finalSize;
    }
}        

我把它放在一个网格中并在鼠标移动过程中使它无效,就像这个

一样
 void OnMouseMove(object sender, MouseEventArgs e)
    {
        var point = e.GetPosition(this);
        var size = new Size(point.X>=0? point.X:0, point.Y>=0? point.Y:0);
        this.Selection.Measure(size);
        this.Selection.Arrange(new Rect(size));

    }

,结果如下图所示 enter image description here

1 个答案:

答案 0 :(得分:1)

尝试UIElement.InvalidateVisual();