2012-04-20 5 views
2

Я хочу нарисовать график на DataGrid. Это будет в первом столбце моей сетки, а график большой и охватывает все строки в сетке данных.Как нарисовать график в DataGrid в WPF?

Как я могу подойти к этому сценарию? Должен ли я использовать Canvas? Если да, должен ли я помещать один маленький холст на каждый DataGridCell или могу ли я каким-то образом создать большой холст поверх DataGrid?

ответ

2

Ну, вы можете делать то, что вы говорите в своем вопросе, который накладывает другой элемент управления поверх сетки и т. Д. И т. Д. Но синхронизация с прокруткой, изменение размера столбца/строки может оказаться кошмаром. По моему опыту, сделав это много раз, один из самых простых способов (в конечном счете, хотя сначала кажется сложнее) извлечь DataGrid Template (используя blend) и изменить его в соответствии с вашими потребностями.

После извлечения шаблона 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» помещается, скроллбары и т.д. Вы можете поместить что-то есть приведения его в соответствие с какими бы то ни столбцов получил:

вы можете разместить рамку и поставить график (контроль диаграммы в нем), контроль границы ширина, высота, Margin, и т.д. с 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, которые являются обычными и более чем просто из готовых решений, все слишком сложно, чтобы дать вам точный ответ. Но я надеюсь, что это поможет.

Смежные вопросы