DataGridに折れ線グラフを描きたいです。これはグリッドの最初の列にあり、グラフは大きく、データ グリッドのすべての行にまたがっています。
このシナリオにどのようにアプローチしますか? キャンバスを使用する必要がありますか? もしそうなら、DataGridCell ごとに 1 つの小さな Canvas を配置する必要がありますか、それとも DataGrid の上に大きな Canvas をレンダリングできますか?
それは、グリッドの上に別のコントロールをオーバーレイすることなどです。しかし、スクロールと同期すると、列/行のサイズ変更は悪夢になる可能性があります。これを何度も行った私の経験から、(最初は難しいように見えますが、長い目で見れば) 簡単な方法の 1 つは、(blend を使用して) 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でカスタムですぐに使えるソリューション以上のことを始めたとき、物事は複雑すぎて正確な答えを得ることができません. しかし、これが役立つことを願っています..