WP7中Chart 控件很好用,但是想要添加点击事件 获取每条数据,然后弹出一个窗口。。。。
private ColumnSeries columnSeries;
myListOfChartData = new List<ChartData>();
myListOfChartData.Add(new ChartData{xProperty="6",yNumber=1});
myListOfChartData.Add(new ChartData { xProperty = "7", yNumber= 2 });
myListOfChartData.Add(new ChartData { xProperty = "8", yNumber= 3 });
myListOfChartData.Add(new ChartData { xProperty = "9", yNumber= 9 });
myListOfChartData.Add(new ChartData { xProperty = "10", yNumber= 13 });
columnSeries = new ColumnSeries();//实例化一个Series:
columnSeries.ItemsSource = myListOfChartData; //设置数据源
columnSeries.DependentValueBinding = new Binding("yNumber"); //后台进行数据绑定
columnSeries.IndependentValueBinding = new Binding("xProperty");
columnSeries.Title = "每次服务获得奖券数";
MyChartOfColumnSeries.Series.Add(columnSeries);//为Chart绑定“显示类型”
MyChartOfColumnSeries.Title = "";
这是添加一个ColumnSeries到Chart中,想要得到点击ColumnSeries的每条数据,可以为ColumnSeries添加点击事件
columnSeries.MouseLeftButtonDown += new MouseButtonEventHandler(Series_MouseLeftButtonDown);
(1)之后怎样才能找到 我点击的是哪个数据条呢?
网上说:你用VisualTreeHelper可以找到每个柱子,就是rectange,然后注册每个柱子的MouseClicked事件。比如右键向下点击,然后再事件里写你需要的方法
public Rectangle FindRectangle(DependencyObject parent){
if (parent == null)
{
return null;
}
Rectangle rec = null;
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
rec = child as Rectangle;
if (rec != null)
{
// 找到,注册事件
rec.MouseLeftButtonDown += new MouseButtonEventHandler(rec_MouseLeftButtonDown);
break;
}
else
{
return FindRectangle(child);
}
}
return rec;
}
void rec_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Write your codes here
}
或者
ColumnSeries series = new ColumnSeries();
series.MouseLeftButtonUp += new MouseButtonEventHandler(series_MouseLeftButtonUp);
private void ColumnSeries_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Rectangle rec = e.OriginalSource as Rectangle;
}
这样可以找到点击的是哪个矩形块
(2)但是我要回去矩形块,柱子所对应的横纵坐标怎么么办呢?
//处理图表点击
private void Series_MouseLeftButtonDown(object sender,MouseEventArgs e)
{
Rectangle rect=e.OriginalSource as Rectangle;
ChartData da=rect.DataContext as ChartData;
if (da != null)
{
string x = da.xProperty;
MessageBox.Show(x);
}
}
这样的到chart关联的DataContext为ChartData,也就是我们为ColumnSeries绑定的数据
接着就可以去除对应的数据了。