我已使用 PAINT 事件在 Winows 表单应用程序的面板上绘制波浪。但是当使用它的WPF时,我没有找到任何相当于具有Paint Event的Panel的元素。谷歌也查了很多,但没什么用。
好吧,我需要在 WPF 中绘制波形,因此建议使用 PaintArgsEvent 的适当解决方案或完全新的解决方案。
谢谢你!
您正在寻找DrawingVisual http://msdn.microsoft.com/en-us/library/ms742254.aspx Class http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.aspx
从第一个链接:
DrawingVisual 是一个轻量级绘图类,用于渲染形状、图像或文本。此类被认为是轻量级的,因为它不提供布局或事件处理,从而提高了其性能。因此,绘图是背景和剪贴画的理想选择。
您还可以访问折线类 http://msdn.microsoft.com/en-us/library/ms615644%28v=vs.100%29.aspx您可以向其中添加点集合。这个例子是修改过的MSDN 论坛示例 http://social.msdn.microsoft.com/forums/en-US/winforms/thread/00f370b3-75b2-4e84-90c2-cafb2af7c5f9/
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
float x0 = 100f;
float y0 = 100f;
Polyline myPoly = new Polyline();
PointCollection polyPoints = myPoly.Points;
Point[] points = new Point[200];
for (int j = 0; j < 200; j++)
{
points[j] = new Point();
points[j].X = x0 + j;
points[j].Y = y0 -
(float)(Math.Sin((2 * Math.PI * j) / 200) * (200 / (2 * Math.PI)));
}
for (int i = 0; i < points.Length ; i++)
{
polyPoints.Add(points[i]);
}
myPoly.Stroke = Brushes.Green;
myPoly.StrokeThickness = 5;
StackPanel mainPanel = new StackPanel();
mainPanel.Children.Add(myPoly);
this.Content = mainPanel;
}
}
以及修改后的 MSDN 示例:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
float x0 = 100f;
float y0 = 100f;
Point[] points = new Point[200];
for (int j = 0; j < 200; j++)
{
points[j] = new Point();
points[j].X = x0 + j;
points[j].Y = y0 -
(float)(Math.Sin((2 * Math.PI * j) / 200) * (200 / (2 * Math.PI)));
}
DrawingBrush db = new DrawingBrush(CreateDrawingVisualRectangle(points).Drawing);
StackPanel mainPanel = new StackPanel();
mainPanel.Background = db;
this.Content = mainPanel;
}
private DrawingVisual CreateDrawingVisualRectangle( Point[] pointarray)
{
DrawingVisual drawingVisual = new DrawingVisual();
// Retrieve the DrawingContext in order to create new drawing content.
DrawingContext drawingContext = drawingVisual.RenderOpen();
// Create a rectangle and draw it in the DrawingContext.
for (int i = 0; i < pointarray.Length-1; i++)
{
drawingContext.DrawLine(new Pen(new SolidColorBrush(Colors.Blue), 2), pointarray[i], pointarray[i + 1]);
}
// Persist the drawing content.
drawingContext.Close();
return drawingVisual;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)