4

나는 알아 내지 못할 큰 문제가 있습니다. 저는 다섯 가지 과일을 가지고 있다고 말하며 각각 과일이 특정 색과 관련되기를 바랍니다. 제가 말한 과일을 0 개 이상 포함하는 3 개의 "바구니"가 있다고 가정 해 봅시다.Silverlight Toolkit; 원형 차트 색상

세 개의 바구니에 원형 차트를 만들 때 각 쐐기는 컨트롤에서 선택한 것으로 보이는 임의의 색상입니다. 내가 말하길, 차트에서 블루 베리를 파란색으로, bannanas를 노란색으로, 어떻게 만드나요?

나는 이것이 이상한 질문이라는 것을 알고 있지만, 그것을 묘사하는 더 간단한 방법을 생각할 수 없다.

해결 방법이 XAML 또는 코드인지는 상관 없습니다. 작동하는 한 마찬가지입니다.

답변

5

나는 해결책을 발견 많은 욕설 및 조사 후했다. 여기에는 움직이는 부분이 많기 때문에 가능한 한 간결하게 각 부분을 유지하면서 주요 부분을 전달합니다. 우선 들어

가 나는 내가 추적을 유지하기 위해 노력하고 개체의 컬렉션을 가지고 내보기 모델에서

public class PileOfFruit 
{ 
    public string Name {get; set; } 
    public int Count { get; set; } 
} 

을, 나는 그 개체의 컬렉션을 가지고있다.

public class BasketVM 
{ 
... 
    private ObservableCollection<PileOfFruit> _FruitBasket = new ObservableCollection<PileOfFruit>(); 
    public ObservableCollection<PileOfFruit> FruitBasket 
    { 
     get { return _FruitBasket; } 
    } 
... 
} 

내 견해로는 바구니에있는 과일의 양을 표시하는 원형 차트를 정의합니다. 가장 중요한 요인은 여기 app.xaml 또는 우리가 PieDataSeries 개체에 대한 템플릿에 놓을 수 있습니다 다른 곳에서 지금

<chartingToolkit:Chart x:Name="ExampleChart"> 
    <chartingToolkit:PieSeries ItemsSource={Binding FruitBasket 
           DependentValueBinding="{Binding Count}" 
           IndependentValueBinding="{Binding Name}"> 
     <chartingToolkit:PieSeries.Palette> 
      <visualizationToolkit:ResourceDictionaryCollection> 
      <ResourceDictionary> 
       <Style x:Key="DataPointStyle" TargetType="Control"> 
        <Setter Property="Template" Value="{StaticResource SliceTemplate}"/> 
       </Style> 

SliceTemplate

에 바인딩 템플릿입니다. 의 값에 세심한주의를 기울이십시오. 그것은 '바나나' '포도'또는 무엇이든간에 달라질 수있는 독립적 인 가치에 묶여 있습니다. 이것은 차례로 값 변환기로 전달됩니다.

<converters:FruitToColorConverter x:Key="FruitToColorConverter"/> 

<ControlTemplate x:Key="SliceTemplate" TargetType="chart:PieDataPoint"> 
    <Path Data="{TemplateBinding Geometry}" 
     Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IndependentValue, Converter={StaticResource FruitToColorConverter}}" 
     Stroke="{TemplateBinding BorderBrush}"> 
    .... 

관련 데이터 변환기는 우리가 원하는 색상을 최종적으로 설정합니다. 그래서 우리가 이렇게하면 ...

public class FruitToColorConverter : IValueConverter 
{ 
    private SolidColorBrush Default = new SolidColorBrush(Colors.Black); 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    if (value == null || (!(value is string))) { return Default; } 

    switch (value as string) 
    { 
     case "Apple": 
     return new SolidColorBrush(Colors.Red); 
     case "BlueBerry": 
     return new SolidColorBrush(Colors.Blue); 
     default: 
     return Default; 
     ...... 

그리고 그 때마다 정확한 색상을 얻는 방법입니다. 나가서 무엇이든 남겨 두거나 명확히해야한다면, 내가 교정을 할 수 있도록 알려주십시오. 여기에 움직이는 부분이 많습니다. = P

3

차트에 대해 고유 한 색상 표를 정의 할 수 있지만 팔레트에 표시되는 데이터 항목의 색상이 자동으로 선택됩니다. 그래서 차트에 블루 베리 블루, bannanas 노랑 등을 표시하는 방법을 알려주지 않습니다 (쉬운 방법). 차트에서 첫 번째 항목을 파란색으로 표시하고 두 번째 항목은 노란색으로 표시하고 bluberries를 먼저 넣고 bannanas를 두 번째로 표시하는 등의 작업을 수행 할 수 있습니다. . 데이터 소스에서.

<chartingToolkit:Chart x:Name="ExampleChart"> 
    <chartingToolkit:PieSeries> 
     <chartingToolkit:PieSeries.ItemsSource > 
      <toolkit:ObjectCollection> 
       <sys:Double>1</sys:Double> 
       <sys:Double>2.3</sys:Double> 
       <sys:Double>3.5</sys:Double> 
       <sys:Double>5</sys:Double> 
      </toolkit:ObjectCollection> 
     </chartingToolkit:PieSeries.ItemsSource > 
     <chartingToolkit:PieSeries.Palette> 
      <visualizationToolkit:ResourceDictionaryCollection> 
      <ResourceDictionary> 
       <Style x:Key="DataPointStyle" TargetType="Control"> 
        <Setter Property="Background" Value="Red"/> 
       </Style> 
      </ResourceDictionary> 
      <ResourceDictionary> 
       <Style x:Key="DataPointStyle" TargetType="Control"> 
        <Setter Property="Background" Value="Green"/> 
       </Style> 
      </ResourceDictionary> 
      <ResourceDictionary> 
       <Style x:Key="DataPointStyle" TargetType="Control"> 
        <Setter Property="Background" Value="Blue"/> 
       </Style> 
      </ResourceDictionary> 
      </visualizationToolkit:ResourceDictionaryCollection> 
     </chartingToolkit:PieSeries.Palette> 
    </chartingToolkit:PieSeries > 
</chartingToolkit:Chart > 

편집 :

일부 샘플은 자신의 paletta를 정의하는 흥미로운 namespeces을 :

xmlns:visualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
+0

Re : 네임 스페이스. xmlns : toolkit = "http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"을 사용하면 다른 별칭을 사용할 수 있습니다. SL3 – AnthonyWJones

+1

이 방법을 시도했지만 차트가 다시로드 된 경우 어떤 이유로, 색상 순서는 # 1에서 시작하지 않습니다. # 1은 "라운드 로빈 방식"으로 선택 되었기 때문입니다. –

-1

다음은 내가 찾은 것입니다 : 색상은 실제로 무작위가 아닙니다 : 매 5 시간마다 반복되는 팔레트가 있습니다 (실제로 숫자가 ' t 문제).해결 방법은 간단합니다. 새 데이터가 표시 될 때마다 piechart를 다시 만듭니다. 이 방법으로 색상 팔레트는 항상 동일한 색상 (즉, 변경되지 않음)에서 시작됩니다. 즉, PieChart를 프로그래밍 방식으로 다시 작성하는 메서드가 있어야합니다 (XAML에 포함하지 않고 자리 표시자를 사용하고 "PieChartBuilder"메서드 호출). 나는이 코드가 적다 고 생각한다.

+1

여전히 색상을 제어 할 수는 없습니다. 데이터가 바뀔 때마다 새로운 차트를 만드는 것은 바보 같은 해킹입니다. 또한 둘 이상의 파이 차트가있는 경우 메소드가 다시 실패합니다. 또한 차트에있는 항목의 순서/개수가 다른 경우 나는 계속해서 갈 수 있었다. –