2012-04-20 21 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中進行自定義且不僅僅是開箱即用的解決方案時,事情太複雜,無法給您確切的答案。但我希望這可以幫助..