2013-03-21 82 views
0

很抱歉,如果這是一個新手問題,但是,我是......我一直在試圖做這個爲期2天,搜索網絡和問周圍,並沒有人可以幫助我,所以任何見解將不勝感激...Silverlight工具包:選擇圖表系列數據項右鍵點擊以及點擊左鍵

我基本上需要做的是選擇一個圖表系列(ColumnSeries或LineSeries)與rightclick數據點之前,我打開上下文菜單。當我處理menuItemClick事件時,我需要數據點x軸的值。理想情況下,我希望能夠在右側和左側點擊提高SelectionChanged事件,但尚未找到任何方法來完成此操作。我已經嘗試了一些替代方案,但一直在打擊死衚衕。這種解決方案似乎做我想要的LineSeries:Select the nearest point in a Silverlight Toolkit chart,但我的系列90%是ColumnSeries,並沒有serie.Points屬性,所以我再次卡住...

+0

最後我在這個解決方案上使用了一個變體:[鏈接] http://www.c-sharpcorner.com/uploadfile/baimey/silverlight-charts-coordinates-on-mousemove/ – yellowpenguin 2013-04-02 09:00:35

回答

0

最後我用此解決方案:http://www.c-sharpcorner.com/uploadfile/baimey/silverlight-charts-coordinates-on-mousemove/

我想我最好發佈它,以防其他人需要這個。

private void Chart_MouseRightButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     Series serie = sender as Series; 
     DateTime xAxisValue; 
     Point p = e.GetPosition(serie); 
     ICategoryAxis xAxis = (CategoryAxis)Chart.ActualAxes[0]; 
     object xHit = xAxis.GetCategoryAtPosition(new UnitValue(p.X, Unit.Pixels)); 

     if (SelectedObj != null) 
     { 
      xAxisValue = (DateTime)new DateTimeConverter().ConvertBack(xHit as String, typeof(String), SelectedObj.DisplayFrequency, Thread.CurrentThread.CurrentUICulture); 

      foreach (Frequency frequency in SelectedObj.Frequencies) 
      { 
       if(frequency == SelectedObj.DisplayFrequency) 
        addMenuItem(frequency, true, xAxisValue); 
       else 
        addMenuItem(frequency, false, xAxisValue); 
      } 

      cMenu.IsOpen = true; 
      cMenu.HorizontalOffset = e.GetPosition(LayoutRoot).X; 
      cMenu.VerticalOffset = e.GetPosition(LayoutRoot).Y; 
     } 
    } 

    private void addMenuItem(Frequency frequency, bool isDisplayFrequency, DateTime xAxisValue) 
    { 
     menuItem = new MenuItem(); 
     menuItem.Header = frequency; 
     menuItem.Tag = xAxisValue; 
     if (isDisplayFrequency) 
     { 
      menuItem.Icon = new TextBlock { Text = "\xfc", FontFamily = new System.Windows.Media.FontFamily("Wingdings"), FontWeight = FontWeights.Bold, TextAlignment = TextAlignment.Center }; 
      menuItem.FontWeight = FontWeights.Bold; 
     } 
     cMenu.Items.Add(menuItem); 
     menuItem.Click += new RoutedEventHandler(menuItem_Click); 
    } 

    void menuItem_Click(object sender, RoutedEventArgs e) 
    { 
     MenuItem item = sender as MenuItem; 
     Frequency itemFreq = (Frequency)item.Header; 
     DateTime xAxisValue = (DateTime)item.Tag; 

     ... 

     cMenu.IsOpen = false; 
    }