|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Controls;
using BaseWPFHelpers;
using System.Windows.Media;
using System.Windows;
using System.ComponentModel;
namespace ScottLogic.Controls.PieChart
{
/// <summary>
/// Converter which uses the IColorSelector associated with the Legend to
/// select a suitable color for rendering an item.
/// </summary>
[ValueConversion(typeof(object), typeof(Brush))]
public class ColourConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// find the item
FrameworkElement element = (FrameworkElement)value;
object item = element.Tag;
// find the item container
DependencyObject container = (DependencyObject)Helpers.FindElementOfTypeUp(element, typeof(ListBoxItem));
// locate the items control which it belongs to
ItemsControl owner = ItemsControl.ItemsControlFromItemContainer(container);
// locate the legend
Legend legend = (Legend)Helpers.FindElementOfTypeUp(owner, typeof(Legend));
CollectionView collectionView = (CollectionView)CollectionViewSource.GetDefaultView(owner.DataContext);
// locate this item (which is bound to the tag of this element) within the collection
int index = collectionView.IndexOf(item);
if (legend.ColorSelector != null)
return legend.ColorSelector.SelectBrush(item, index);
else
return Brushes.Black;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.