我正在尝试使用数据网格中绑定到条形图的3个字符的月缩写格式化一个名为'Month'的列。我的网格和图表基于此演示示例:http://demos.telerik.com/silverlight/#Chart/Aggregates。基本上,网格编译数据并按年份,季度,月份和其他一些类别进行汇总。对于Month列,我尝试了两种不同的方法(出于排序目的,我必须使用整数或一些日期值)。首先,我只是将Month作为一个整数字段,然后使用映射在xaml中的转换器为'Month'字段显示'JAN','FEB'等。这对于网格工作正常,但图表将显示1, 2,而不是月份缩写。我研究了这个并且无法想出将转换器映射到图表的解决方案。因此,我尝试将Month字段设置为日期时间,然后将值设置为1/1 / 1900,2 / 1/1900等,并将字段的格式指定为网格的xaml中的“MMM”。然后,当用户按月分组时,我使用以下语句设置图表中的格式:
SalesAnalysisChart.DefaultView.ChartArea.AxisX.DefaultLabelFormat = "MMM";
这部分起作用,当跨越x轴显示月份时,它们被正确标记,但不是当它们出现在图例中时(当然,用户可以按任何列分组,可能会也可能不会包括月)。我已经尝试过设置LegendItemLabelFormat,ItemLabelFormat等,但没有成功。我不确定要设置属性的元素。我只需要更改Month列的默认格式 - 所有其他列在分组时应该正常显示。我还遇到了一个名为'LegendItemFormatConverter'的类,看起来很有希望,但我找不到任何关于如何实现它的例子。我实际上更喜欢转换器方法,因为我写的转换器在所有大写字母中显示月份缩写,而“MMM”格式以大写/小写形式显示。这是我最初用于网格的转换器代码:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Data;
namespace ApolloSL
{
public class MonthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
DateTime date = new DateTime(1900, (Int32)value, 1);
return date.ToString("MMM").ToUpper();
}
else
{ return ""; }
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString();
}
}
}
请帮忙......
预先感谢您的协助,
布赖恩