2012-04-20 19 views
2

我想在DataGrid上绘制折线图。这将位于我的网格的第一列,并且该图很大,并跨越数据网格上的所有行。如何在WPF中将图形绘制到DataGrid中?

我会如何处理这种情况?我应该使用Canvas吗?如果是这样,我应该为每个DataGridCell放置一个小的Canvas,或者我可以以某种方式在DataGrid的顶部渲染一个大的Canvas?

回答

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”被放置在网格,滚动条等,您可以将任何东西有与任何列对齐你得到:

你可以把一个边界,并把图形(图表控制它),控制边框宽度,高度,保证金等具有约束力,这样的事情:

<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中进行自定义且不仅仅是开箱即用的解决方案时,事情太复杂,无法给您确切的答案。但我希望这可以帮助..