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