如何在WPF中将图形绘制到DataGrid中?

时间:2012-04-20 11:02:56

标签: wpf canvas datagrid

我想在DataGrid上绘制折线图。这将位于我网格的第一列,图形很大,跨越数据网格上的所有行。

我将如何处理这种情况?我应该使用Canvas吗?如果是这样,我应该为每个DataGridCell放置一个小画布,还是可以以某种方式在DataGrid上渲染一个大画布?

1 个答案:

答案 0 :(得分:2)

好吧,你可以在你的问题中做你说的话,它覆盖了网格顶部的另一个控件等等。但是与滚动同步,列/行调整大小可能会成为一场噩梦。根据我的经验,多次这样做,其中一个更简单的方法(从长远来看,即使一开始看起来更难)是提取DataGrid模板(使用混合)并根据您的需要进行修改。

在您提取DataGrid的模板后,您会找到:

....
<ControlTemplate TargetType="{x:Type DataGrid}">
    <Border ...>
       <ScrollViewer Focusable="false" Name="DG_ScrollViewer" Background="{TemplateBinding Background}">
          <ScrollViewer.Template>
             <ControlTemplate TargetType="{x:Type ScrollViewer}">
                  <Grid x:Name="DG_MainGrid" Background="{TemplateBinding Background}">

这是放置“SelectAllButton”的网格,滚动条等。您可以在其中放置任何内容,使其与您获得的任何列对齐:

你可以放置一个边框并将图形(图表控件放在其中),用Binding控制边框宽度,高度,边距等,如下所示:

<Border Grid.Row="2" Grid.ColumnSpan="2" BorderThickness="2"    
        Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:MyView}}, Path=ChartBorderWidth}"
        Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:MyView}}, Path=ChartBorderHeight}"
        Margin="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:MyView}}, Path=ChartBorderMargin}">
        <..your charting control>
</Border>

无论如何,这只是一个建议,当你开始在WPF中做自定义的事情而不仅仅是开箱即用的解决方案时,事情太复杂了,无法给你确切的答案。但我希望这会有所帮助..