XamDataChart にはツールチップ機能が実装されていますが、ツールチップが表示されるのはマウスホバー時のみとなります。
データポイントの情報をクリック操作などによってマウス位置に関係なく表示しておきたい場合があります。
XamDataChart の SeriesMouseLeftButtonDown イベントにてクリックされたシリーズのデータポイントの値と位置情報を取得し、Popup を表示する方法をご紹介します。
xaml 上にデータポイントの情報を表示する Popup 要素を定義しておきます。
<Popup Name="myPopup1" Placement="Absolute"> <Border BorderBrush="Gray" Background="LightGray" BorderThickness="1" > <StackPanel Background="LightYellow" Orientation="Horizontal" > <TextBlock x:Name="myLabel1" Margin="10" Foreground="Blue"></TextBlock> <TextBlock x:Name="myValue1" Margin="10"></TextBlock> </StackPanel> </Border> </Popup>
XamDataChart の SeriesMouseLeftButtonDown イベントで引数からデータポイントの位置を取得してPopup 要素の位置を設定し、値を Popup 内の TextBlock に書き込みます。
IsOpen プロパティを true と設定して Popup を表示します。
double xPos; double yPos; private void xamDataChart1_SeriesMouseLeftButtonDown(object sender, Infragistics.Controls.Charts.DataChartMouseButtonEventArgs e) { xPos = xAxis.UnscaleValue(e.ChartPosition.X); yPos = yAxis.UnscaleValue(e.ChartPosition.Y); updatePopupLocation(); myLabel1.Text = (e.Item as DataItem).Label + ":"; myValue1.Text = (e.Item as DataItem).Value1.ToString(); myPopup1.IsOpen = true; } private void updatePopupLocation() { myPopup1.HorizontalOffset = xamDataChart1.PointToScreen(new Point(0, 0)).X + xAxis.ScaleValue(xPos); myPopup1.VerticalOffset = xamDataChart1.PointToScreen(new Point(0, 0)).Y + yAxis.ScaleValue(yPos); }
チャートがズームされたり、ウィンドウの位置が変更された際に Popup が追随するよう、上記のupdatePopupLocation() メソッドを XamDataChart の LayoutUpdated イベントおよび MainWindow のLocationChanged イベントでも実行します。
private void xamDataChart1_LayoutUpdated(object sender, EventArgs e) { updatePopupLocation(); } private void Window1_LocationChanged(object sender, EventArgs e) { updatePopupLocation(); }
XamDataChart の PreviewMouseLeftButtonDown イベントをハンドリングし、チャート内のその他の箇所がクリックされた場合に Popup の IsOpen プロパティを false に設定して非表示とします。
private void xamDataChart1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { myPopup1.IsOpen = false; }
