巨大的WPF控件中缺少渲染的矩形

时间:2016-10-18 05:28:08

标签: c# wpf wpf-controls drawingcontext

我需要一个包含300000000 ControlWidth的WPF Height,我会根据一些输入在其上绘制Rectangles。我在控件的Rectangle上绘制了OnRender。出于测试目的,我已将控件放在ScrollViewer内,并在从(0,0)到(1000,1000)的每个像素上绘制Rectangles。如果是Width& Height为1000000,Rectangles绘制正确,如下所示(Rectangles绘制在从(0,0)到(1000,1000)的所有像素上,所以看起来喜欢下面的链接)

https://social.msdn.microsoft.com/Forums/getfile/950012

但如果我将尺寸增加到3000000,图中缺少几行,如下所示, https://social.msdn.microsoft.com/Forums/getfile/950018

我的Xaml:

<ScrollViewer x:Name="MainScrollViewer"
              Grid.Row="2"
              Grid.ColumnSpan="2"
              HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Auto">
  <waferControl:WaferMapControl x:Name="WaferControl"
                                Grid.Row="2"
                                Grid.ColumnSpan="2"
                                Width="30000000"
                                Height="30000000"
                                Margin="10"
                                ColumnCount="{Binding WaferInfo.ColumnCount}"
                                RowCount="{Binding WaferInfo.RowCount}"
                                SelectedCells="{Binding SelectedCellCollection}"
                                Visibility="Collapsed" />
</ScrollViewer>

我在OnRender的{​​{1}}中使用了以下代码。

WaferMapControl

private void RenderBackgroud(IEnumerable lists`enter code here`) { using (DrawingContext dc = _backgroundDv.RenderOpen()) { SolidColorBrush brush = Brushes.Black; if (brush.CanFreeze) brush.Freeze(); foreach (GridCellInfo cellInfo in lists) { double length = cellInfo.GridRange; var point = new Point( cellInfo.RowIndex + 1, ActualHeight - cellInfo.ColumnIndex - length); RenderBackgroud(dc, point, brush, length); } } } private void RenderBackgroud(DrawingContext dc, Point point, Brush brush, double length) { var rect = new Rect(point, new Size(length, length)); dc.DrawRectangle(brush, null, rect); } 包含x,y坐标。点计算是从左下角绘制的。我的样本中长度为1。

有人可以帮助我,这里有什么问题。如果您需要我的任何帮助,请告诉我。

0 个答案:

没有答案