重绘 WPF 控件(图像控件)时如何引发事件?

How do I raise an event when a WPF control ( Image control) is redrawn?

我有一个 winforms 绘画事件处理程序来处理图片框的绘画事件。正如 paint 事件描述所说,“......当控件被重绘时事件被触发”。我不太明白这一点,我希望在 WPF 中的图像控件上引发相同的事件。但我找不到任何此类事件。这是 winforms 代码

如何在 WPF 中执行此操作?

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (pictureBox1.Image != null)
    {
        if (temprect != new Rectangle())
        {
            e.Graphics.DrawRectangle(new Pen(selectionBrush, 2), temprect);
        }
    }
    else
    {
        using (Font myFont = new Font("Arial", 40, FontStyle.Bold))
        {
            e.Graphics.DrawString("No Image", myFont, Brushes.LightGray,
                new Point(pictureBox1.Width / 2 - 132, pictureBox1.Height / 2 - 50));
        }
    }
}

我已经使用 DrawingContext class 将事件处理程序中的所有代码转换为 WPF。现在,我只需要在我可以筹集 "when the Image control is redrawn" 的事件上得到帮助。

WPF 不使用 WinForm 的按需模式绘画。 UIElementOnRender 方法被布局系统调用,只要它想要元素到 "redraw" 本身。您可以在 class:

中覆盖此方法
public class YourElement : FrameworkElement
{
    protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);
    }
}

如果您想明确地重新呈现元素,您可以调用 InvalidateVisual() 方法。