【发布时间】:2019-01-04 09:43:44
【问题描述】:
我有一个处理图片框的绘制事件的 winforms 绘制事件处理程序。正如绘制事件描述所说,“......当重绘控件时触发事件”。我不太明白这一点,我希望在 WPF 中的 Image 控件上引发相同的事件。但我找不到任何此类事件。这是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 类将事件 Hanlder 中的所有代码转换为 WPF。现在,我只需要对可以引发“重绘图像控件时”的事件的帮助。
【问题讨论】:
-
为什么要举办这个活动?您可以创建与 winforms 中相同的
event(使用EventHandler<T>),还是您想要特定于 wpf 的routed event(difference)?或者你只是想做custom painted control? -
正如绘制事件的描述(不是非常丰富的信息)所说,“当图片框被重新绘制时引发事件”。所以我的问题是我找不到在控件被 REDRAWN 时引发的任何 WPF 等效事件。我尝试在 Image 控件上使用 SourceUpdated 事件,但它从未引发。
-
WPF 在其 UI 中使用不同于 winforms 的 architecture。你没有解释你为什么想要这个活动。做什么?如果您只是想画一两条线,那么添加一两条线是一种可能性,它们通常在 xaml(资源字典)中定义为控件模板,但后面的代码也很好(参见我之前评论中的链接)。
-
Wpf 控件
提供“Initialized”、“Loaded”、“ManipulationCompleted”等事件。只需尝试重绘时触发哪一个即可。
标签: c# wpf winforms paintevent