2
我想在DataGrid上绘制折线图。这将位于我的网格的第一列,并且该图很大,并跨越数据网格上的所有行。如何在WPF中将图形绘制到DataGrid中?
我会如何处理这种情况?我应该使用Canvas吗?如果是这样,我应该为每个DataGridCell放置一个小的Canvas,或者我可以以某种方式在DataGrid的顶部渲染一个大的Canvas?
我想在DataGrid上绘制折线图。这将位于我的网格的第一列,并且该图很大,并跨越数据网格上的所有行。如何在WPF中将图形绘制到DataGrid中?
我会如何处理这种情况?我应该使用Canvas吗?如果是这样,我应该为每个DataGridCell放置一个小的Canvas,或者我可以以某种方式在DataGrid的顶部渲染一个大的Canvas?
那么,你可以做你说的问题,这是覆盖网格顶部的另一个控制等,但与滚动,列/行调整大小同步可能被证明是一场噩梦。根据我的经验,做了这么多次,其中一种更简单的方法(从长远来看,尽管起初看起来比较困难)是提取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中进行自定义且不仅仅是开箱即用的解决方案时,事情太复杂,无法给您确切的答案。但我希望这可以帮助..