我正在为需要在表中显示数据(即DataGrid)的表面编写应用程序。这很好,除了表格捕获了 ScatterViewItem 控件的触摸交互(基本上是一个可以由用户旋转、缩小和移动的面板)。这可以防止用户轻松操作 ScatterViewItem。
为了解决这个问题,我认为将控件绘制到图像上并放上去会很容易。看来我错了。这是我所有的尝试:
http://pastie.org/private/gfkkv9f6apgrqi1ucspwpa(无需阅读此内容,除非您认为它有用。这就是为什么它在馅饼中而不是在此处)
我将 DataGrid 放在另一个 Grid 中,否则将无法正确测量:
Grid g = new Grid();
g.Children.Add(dataTable);
SurfaceScrollViewer viewer = new SurfaceScrollViewer();
viewer.Content = Utility.SaveWPFControlAsImage(g);
如果我们将最后一行更改为
viewer.Content = g;
我们得到了一张好表:
如果我们不这样做,我们会得到:
SaveWPFControlAsImage 如下:
public static System.Windows.Controls.Image SaveWPFControlAsImage(FrameworkElement e)
{
e.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
RenderTargetBitmap targetBitmap =
new RenderTargetBitmap((int)e.DesiredSize.Width,
(int)e.DesiredSize.Height,
96d, 96d,
PixelFormats.Default);
targetBitmap.Render(e);
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(targetBitmap));
MemoryStream stream = new MemoryStream();
encoder.Save(stream);
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = new MemoryStream(stream.ToArray());
bmp.EndInit();
return new System.Windows.Controls.Image()
{
Source = bmp,
};
}
所以也许我只是没有正确渲染它,或者,也许,我只是在错误的角度处理这个......