2012-12-09 3 views
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> 

예상대로,이 색상 빨간색 내 라인 시리즈 :

Red line series

속보 변경

이제 알겠습니다. 내 데이터 포인트 배경에 데이터 바인딩. 나는 단 하나의 변화를 만든다. 배경 브러시를 직접 지정하는 대신 브러시이기도 한 LineSeries 속성 인 Tag 속성에 바인딩합니다 (이전 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> 

결과

은 이것이다 :

enter image description here

그래서 점은 녹색이다. 하지만 줄은입니다.

내 생각에는 녹색 줄도 보입니다. 어디 있니?

답변

0

WPF 툴킷 소스에서 파기 한 후 해결책을 찾았습니다.

PolylineStroke 속성이 TemplateBinding을 통해 Background 속성에 바인딩되어 있습니다. 나는 이것이 Background 속성 자체를 묶는 나의 시도와 잘 어울리지 않는다고 생각한다.

This answer (SO)은 컴파일시에 TemplateBinding이 평가된다는 것을 나타냅니다. TemplateBinding을 제거하고 Tag에 직접 Tag 속성을 바인딩합니다 (기억 : Tag에는 녹색 브러시가 포함됨).

WPF Toolkit 출처 \ 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> 

(. 당신은 내가에서 복사 한 소스를 찾을 수 generic.xaml을<!-- charting:LineSeries -->를 검색 할 수 있습니다 관심이 있다면)

유일한 수정 사항은 Stroke입니다. 여기서는 데이터 포인트에 사용한 바인딩과 동일한 바인딩을 사용합니다. 할

마지막 일 :이 스타일을 사용하는 LineSeries 알려주기 :

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

보라 보라, 그것은 작동합니다. 선은 다시이며 녹색이다 :

Diagram - Line Color Fixed

(만약 당신이 자세히 본다면 시리즈에 대한 범례 항목이 여전히 잘못된 색상을 가지고 볼하지만이 솔루션은 위의 매우 유사합니다 가정합니다..)

관련 문제