我需要一个包含300000000 Control
和Width
的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。
有人可以帮助我,这里有什么问题。如果您需要我的任何帮助,请告诉我。