2016-07-27 7 views
0

Ich arbeite derzeit an einem einfachen C# WPF-Programm, das ein Säulendiagramm anzeigen muss. Die grundlegenden Säulendiagramme des Namespaces System.Windows.Controls.DataVisualization.Charting werden jedoch mit einer Füllfarbe für die Farbverlaufsspalte geliefert, und das möchte ich nicht im Programm.WPF-Diagramme entfernen Farbverlaufsfüllung

Gibt es eine Möglichkeit, entweder in XAML oder in C# -Code den Füllpinsel der Spalten auf einen SolidBrush zu setzen? Die ColumnSeries werden programmgesteuert hinzugefügt, während das Programm ausgeführt wird, so dass ich keinen Zugriff auf sie in der XAML habe. Ich bin immer noch ziemlich neu in WPF und XAML, damit ich weiß nicht wirklich, wo eine Antwort

Hier ist mein Code ‚bis jetzt auf der Suche zu beginnen, ist es allerdings ziemlich einfach ist, gibt es nicht wirklich viel zu sehen:

WPF Column Chart Styling: Remove the gradient effect, set the color of the hash marks on y axis (the minor grid lines) hier:

MainWindow.xaml.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Controls.DataVisualization.Charting; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      ColumnSeries lC = new ColumnSeries(); 
      List<KeyValuePair<string, int>> valueList1 = new List<KeyValuePair<string, int>>(); 
      valueList1.Add(new KeyValuePair<string, int>("Developer", 60)); 
      valueList1.Add(new KeyValuePair<string, int>("Misc", 20)); 
      valueList1.Add(new KeyValuePair<string, int>("Tester", 50)); 
      valueList1.Add(new KeyValuePair<string, int>("QA", 30)); 
      valueList1.Add(new KeyValuePair<string, int>("Project Manager", 40)); 

      lC.DependentValuePath = "Value"; 
      lC.IndependentValuePath = "Key"; 
      lC.ItemsSource = valueList1; 

      chart.Series.Add(lC); 
     } 
    } 
} 

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid x:Name="grid"> 
     <chartingToolkit:Chart x:Name="chart"> 

     </chartingToolkit:Chart> 
    </Grid> 
</Window> 

ich diesen Beitrag habe festgestellt. Das erste Problem des Posters ist ziemlich genau das gleiche wie meines. Die ersten Antworten sagen ihm, die Rahmengröße zu erhöhen, um die Spalte zu füllen, aber in meinem Programm brauche ich noch die Spaltenränder, so dass ich nicht wirklich das will und das ist die einzige Antwort, so dass es aussieht, als wäre das ein ziemlich schwieriges Problem. Ich würde deine Hilfe sehr schätzen. Vielen Dank!

Antwort

0

Um die Darstellung zu ändern, möchten Sie die Vorlage im ColumnSeries.DataPointStyle ändern. Um dies von Code hinten zu tun, würde ich mich sehr unnatürlich fühlen, also habe ich Ihren Code geändert, nur um den Style in XAML definieren zu können.

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
     xmlns:local="clr-namespace:WpfApplication1" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.DataContext> 
     <local:MainWindowViewModel /> 
    </Window.DataContext> 
    <Grid x:Name="grid"> 
     <Grid.Resources> 
      <!--Set ColumnColor--> 
      <Brush x:Key="MyColumnColor">Red</Brush> 
      <!--Style override--> 
      <Style x:Key="MyColumnDataPointStyle" 
        TargetType="{x:Type chartingToolkit:ColumnDataPoint}"> 
       <Setter Property="Background" 
        Value="{StaticResource MyColumnColor}" /> 
       <Setter Property="BorderBrush" 
        Value="Black" /> 
       <Setter Property="BorderThickness" 
        Value="1" /> 
       <Setter Property="IsTabStop" 
        Value="False" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type chartingToolkit:ColumnDataPoint}"> 
          <Border x:Name="Root" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}"> 
           <Border.ToolTip> 
            <ContentControl Content="{TemplateBinding FormattedDependentValue}" /> 
           </Border.ToolTip> 
           <Grid Background="{TemplateBinding Background}"> 
            <!--Change Border appearance--> 
            <Border BorderBrush="#CCFFFFFF" 
             BorderThickness="1"> 
             <Border BorderBrush="#77FFFFFF" 
             BorderThickness="1" /> 
            </Border> 
           </Grid> 
          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Grid.Resources> 
     <chartingToolkit:Chart> 
      <chartingToolkit:ColumnSeries ItemsSource="{Binding ValueList}" 
              DependentValuePath = "Value" 
              IndependentValuePath = "Key" 
              DataPointStyle="{StaticResource MyColumnDataPointStyle}"> 
      </chartingToolkit:ColumnSeries> 
     </chartingToolkit:Chart> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

using System.Windows; 
using System.Collections.Generic; 
using System.Windows.Controls.DataVisualization.Charting; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 

    public class MainWindowViewModel 
    { 
     private List<KeyValuePair<string, int>> valueList = new List<KeyValuePair<string, int>>() 
     { 
      (new KeyValuePair<string, int>("Developer", 60)), 
      (new KeyValuePair<string, int>("Misc", 20)), 
      (new KeyValuePair<string, int>("Tester", 50)), 
      (new KeyValuePair<string, int>("QA", 30)), 
      (new KeyValuePair<string, int>("Project Manager", 40)) 
     }; 

     public List<KeyValuePair<string, int>> ValueList 
     { 
      get { return valueList; } 
     } 
    } 
} 
0

Wie Sie WPF-Steuerelemente formatieren, erfahren Sie am einfachsten mit Expression Blend. Suchen here for an example how to style Diagrammsteuerung

+0

Danke für den Link, war genau das, was ich brauchte. Ich suche seit Jahren nach einem guten Beispiel für Chart-Styling, habe aber nicht viel gefunden ... – zockDoc