2

WPFツールキットを使用して単純な折れ線グラフを描画しています。私の目標は、データバインディングを介してシリーズの線の色を設定することです。これは部分的にしか成功しません。問題は、なぜですか?

設定

名前空間:

xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="WpfApplication3.MainWindow"
xmlns:media="clr-namespace:System.Windows.Media;assembly=PresentationCore"

チャート:

<chartingToolkit:Chart x:Name="chart">
    <chartingToolkit:LineSeries x:Name="seriesEntries" IndependentValueBinding="{Binding Key}" DependentValueBinding="{Binding Value}" DataPointStyle="{StaticResource CommonLineSeriesDataPoint}">
        <chartingToolkit:LineSeries.Tag>
            <media:Brush>Green</media:Brush>
        </chartingToolkit:LineSeries.Tag>
    </chartingToolkit:LineSeries>
</chartingToolkit:Chart>

今のところ無視してTagください。後で関連します。

グラフにはカスタムデータポイントスタイルがあることに注意してくださいCommonLineSeriesDataPoint

<Style x:Key="CommonLineSeriesDataPoint" TargetType="chartingToolkit:LineDataPoint">
    <Setter Property="Background">
        <Setter.Value>
            <media:Brush>Red</media:Brush>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="chartingToolkit:LineSeries">
    <Setter Property="DataPointStyle" Value="{StaticResource CommonLineSeriesDataPoint}" />
</Style>

予想通り、これは私のラインシリーズをに着色します:

赤い線シリーズ

画期的な変化

次に、データポイントのバックグラウンドをデータバインドします。変更を1つだけ行います。背景ブラシを直接指定する代わりに、ブラシでもあるTagmyのプロパティにバインドしますLineSeries(前LineSeriesの宣言を参照してください。これは緑色です)。

<Style x:Key="CommonLineSeriesDataPoint" TargetType="chartingToolkit:LineDataPoint">
    <Setter Property="Background">
        <Setter.Value>
            <Binding Path="Tag" RelativeSource="{RelativeSource AncestorType={x:Type chartingToolkit:LineSeries}}" />
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="chartingToolkit:LineSeries">
    <Setter Property="DataPointStyle" Value="{StaticResource CommonLineSeriesDataPoint}" />
</Style>

結果は次のとおりです。

ここに画像の説明を入力してください

したがって、ドットは緑色です。しかし、ラインはなくなっています。

私の期待は、緑の線も見ることです!それはどこにある?

4

1 に答える 1

0

WPF Toolkit Sourcesを調べた後、解決策を見つけました。

Strokeシリーズのプロパティは、を介しPolylineてプロパティにバインドされていることがわかります。これは、プロパティ自体をバインドしようとしてもうまくいかないのではないかと思います。BackgroundTemplateBindingBackground

SOに関するこの回答TemplateBindingは、コンパイル時に評価されることを示唆しています。Strokeそれでは、TemplateBindingを削除して、プロパティを直接Tag私のにバインドしましょう(緑のブラシが含まれていることをLineSeries忘れないでください)。Tag

WPFツールキットのソース\Source\ DataVisualization \ Themes \ generic.xamlから、のスタイル定義の一部をコピーして、 :LineSeriesに追加しました。ResourceDictionary

<Style x:Key="CommonLineSeries" TargetType="chartingToolkit:LineSeries" BasedOn="{StaticResource {x:Type chartingToolkit:LineSeries}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="chartingToolkit:LineSeries">
                <Canvas x:Name="PlotArea">
                    <Polyline Points="{TemplateBinding Points}" Stroke="{Binding Tag, RelativeSource={RelativeSource AncestorType={x:Type chartingToolkit:LineSeries}}}" Style="{TemplateBinding PolylineStyle}"/>
                </Canvas>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

(興味がある場合は<!-- charting:LineSeries -->generic.xamlで検索して、コピー元のソースを見つけることができます。)

私が変更したのは、のバインディングだけですStroke。ここでは、データポイントに使用したのと同じバインディングを使用します。

最後に行うこと:LineSeriesこのスタイルを使用するようにに指示します。

<chartingToolkit:LineSeries x:Name="seriesEntries" IndependentValueBinding="{Binding Key}" DependentValueBinding="{Binding Value}" DataPointStyle="{StaticResource CommonLineSeriesDataPoint}" Style="{StaticResource CommonLineSeries}">

そして見よ、それは機能する。線が戻ってきて、緑色になっています。

図-線の色を修正

(よく見ると、シリーズの凡例エントリの色がまだ間違っていることがわかります。ただし、解決策は上記と非常に似ていると思います。)

于 2012-12-15T11:38:55.820 に答える