Zur Zeit i ein Balkendiagramm aus einem listbox aus diesem Beispiel gemacht haben: http://weblogs.thinktecture.com/cnagel/2011/06/wpf-listbox-as-bar-chart.htmländern
Was ich tun möchte, ist die Farbe der Balken zu ändern. Mein Diagramm hat 5 Balken und jeder muss eine andere Farbe haben. Grundsätzlich möchte ich die Füllung des Rechtecks ändern.
EDIT: Die Items scheinen nicht mehr, jeden Inhalt zu bekommen und mein Diagramm ist unsichtbar.
public class GrafiekBar : INotifyPropertyChanged
{
private int value;
private Brush fill = Brushes.Blue;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public List<GrafiekBar> GetDataGrafiek()
{
int[] getallen = new int[] { 3, 5, 8, 6, 2 };
List<GrafiekBar> list = new List<GrafiekBar>();
for (int i = 0; i < getallen.Length; i++)
{
GrafiekBar bar = new GrafiekBar();
bar.Value = getallen[i];
bar.Fill = Brushes.Blue;
list.Add(bar);
}
return list;
}
/// <summary>
/// Implement INotifyPropertyChanged in properties
/// http://msdn.microsoft.com/en-us/library/ms229614.aspx
/// </summary>
public int Value
{
get { return this.value; }
set
{
if (value != this.value)
{
this.value = value;
NotifyPropertyChanged("Value");
}
}
}
public Brush Fill
{
get { return this.fill; }
set
{
if (value != this.fill)
{
this.fill = value;
NotifyPropertyChanged("Fill");
}
}
}
}
XAML:
<ObjectDataProvider x:Key="odpLbGrafiek" ObjectType="{x:Type myClasses:GrafiekBar}" MethodName="GetDataGrafiek"/>
<ObjectDataProvider x:Key="odpLbGrafiekColors" ObjectType="{x:Type myClasses:GrafiekBar}" MethodName="Fill"/>
<DataTemplate x:Key="GrafiekItemTemplate">
<Border Width="Auto" Height="Auto">
<Grid>
<Rectangle x:Name="recGrafiek" Fill="{Binding Source={StaticResource odpLbGrafiekColors}}" StrokeThickness="0"
Height="45" Width="{Binding}" Margin="13.2"
HorizontalAlignment="Right" VerticalAlignment="Bottom">
<Rectangle.LayoutTransform>
<ScaleTransform ScaleX="20" />
</Rectangle.LayoutTransform>
</Rectangle>
</Grid>
</Border>
</DataTemplate>
<ItemsControl x:Name="icGrafiek"
Margin="0"
ItemsSource="{Binding Source={StaticResource odpLbGrafiek}}"
ItemTemplate="{DynamicResource GrafiekItemTemplate}"
Grid.RowSpan="5"
Grid.Column="1" Background="{x:Null}" HorizontalAlignment="Left" RenderTransformOrigin="0.5,0.5"
>
<ItemsControl.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="180"/>
<TranslateTransform/>
</TransformGroup>
</ItemsControl.RenderTransform>
</ItemsControl>
Mit freundlichen Grüßen.
Sie sollten eine 'Liste' zurückgeben, * erstellen * Sie keine UIElements im Code hinterher, die 'ListBox' erstellt die' ListBoxItems 'für Sie, auch wenn Sie' ListBoxItems' zurückgeben, wird 'ItemTemplate' * ignoriert *, Sie sollten [Binding errors] (http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30) sehen /debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx). –
Meine Liste scheint jetzt nicht mit den Werten zu aktualisieren? Eine zweite Änderung durchgeführt, die die Methode auflistet, die das itemsControl füllt. Aber der XAML-Parse-Fehler ist in der Tat jetzt weg, obwohl mein Diagramm jetzt leer bleibt. Grüße Rakr – Rakr
Hast du einen Standardwert für 'Fill' festgelegt? Wenn Sie dies nicht tun, werden Sie nichts sehen, da die 'Füllung' der' Rechtecke' 'null' ist. –