我正在尝试从控件的左边缘到右边缘绘制图形的不同策略。到目前为止,我们一直在使用具有折线的“ Canvas ”,该折线执行的很好,但仍然可以进行一些改进。
当我尝试使用DrawingContext.DrawLine时,我的表现令人难以置信的糟糕,我不知道为什么。这是我可以提出的最简洁的代码,它说明了这个问题:
public class TestControl : Control {
static Pen pen = new Pen(Brushes.Gray, 1.0);
static Random rnd = new Random();
protected override void OnRender(DrawingContext drawingContext) {
var previousPoint = new Point(0, 0);
for (int x = 4; x < this.ActualWidth; x += 4) {
var newPoint = new Point(x, rnd.Next((int)this.ActualHeight));
drawingContext.DrawLine(pen, previousPoint, newPoint);
previousPoint = newPoint;
}
}
}
而且MainWindow.xaml仅包含以下内容:
<StackPanel>
<l:TestControl Height="16"/>
<!-- copy+paste the above line a few times -->
</StackPanel>
现在调整窗口大小:根据StackPanel中TestControl的数量,我会遇到明显的延迟(10个控件)或30秒钟的总静止状态(100个控件),我什至无法点击“Stop Debugger”按钮在VS中
我对此很困惑,显然我做错了事,但是由于代码是如此简单,所以我不知道那是什么。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我正在使用.Net4,以防万一。
最佳答案
您可以通过卡住笔来获得性能。
static TestControl()
{
pen.Freeze();
}
关于wpf - DrawingContext.DrawLine性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937364/