2

DataGridに折れ線グラフを描きたいです。これはグリッドの最初の列にあり、グラフは大きく、データ グリッドのすべての行にまたがっています。

このシナリオにどのようにアプローチしますか? キャンバスを使用する必要がありますか? もしそうなら、DataGridCell ごとに 1 つの小さな Canvas を配置する必要がありますか、それとも DataGrid の上に大きな Canvas をレンダリングできますか?

4

1 に答える 1

2

それは、グリッドの上に別のコントロールをオーバーレイすることなどです。しかし、スクロールと同期すると、列/行のサイズ変更は悪夢になる可能性があります。これを何度も行った私の経験から、(最初は難しいように見えますが、長い目で見れば) 簡単な方法の 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でカスタムですぐに使えるソリューション以上のことを始めたとき、物事は複雑すぎて正確な答えを得ることができません. しかし、これが役立つことを願っています..

于 2012-04-20T15:18:57.043 に答える