0

これが初心者の質問である場合は申し訳ありませんが、まあ、私は...そして私はこれを2日間試み、ウェブを検索して周りに尋ねましたが、誰も私を助けることができなかったので、洞察をいただければ幸いです. ..

基本的に行う必要があるのは、コンテキスト メニューを開く前に、右クリックでチャート シリーズ (ColumnSeries または LineSeries) データポイントを選択することです。menuItemClick イベントを処理するときに、データポイントの x 軸の値が必要です。理想的には、左クリックだけでなく右クリックでも SelectionChanged イベントを発生させたいのですが、それを行う方法が見つかりませんでした。いくつかの代替手段を試しましたが、行き止まりにぶつかり続けました。このソリューションは、LineSeries: Select thenearest point in a Silverlight Toolkit chartを実行しているように見えましたが、シリーズの 90% は ColumnSeries であり、serie.Points プロパティがないため、再び行き詰まります...

4

1 に答える 1

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;
    }
于 2013-04-02T09:23:22.613 に答える