Silverlight LineDataPoint Увеличить размер при наведении курсора мыши - PullRequest
0 голосов
/ 26 июля 2011

Я использую собственный стиль в словаре ресурсов для LineDataPoint, доступной с инструментарием.

Я хочу, чтобы размер точки данных увеличивался в размерах при наведении курсора мыши и возвращался к своему первоначальному размеру после ухода мыши. Какой лучший способ реализовать это?

1 Ответ

0 голосов
/ 01 августа 2011

Я не нашел лучшего решения, чем использование расширенного класса с необходимой функциональностью:

public class ExtendedLineSeries : LineSeries
{
    //I assume that all points have the same size
    private double _originalDataPointWidth;
    private double _originalDataPointHeight;

    protected override DataPoint CreateDataPoint()
    {
        var dp = base.CreateDataPoint();

        if (this.IncreaseDataPointSizeTo != null)
        {
            dp.MouseEnter += new MouseEventHandler(OnDataPointMouseEnter);
            dp.MouseLeave += new MouseEventHandler(OnDataPointMouseLeave);
        }

        return dp;
    }
    /// <summary>
    /// The width and height to which the point is increased in size
    /// </summary>
    public double? IncreaseDataPointSizeTo { get; set; }

    void OnDataPointMouseLeave(object sender, MouseEventArgs e)
    {
        var dp = sender as DataPoint;
        if (dp != null)
        {
            //return to the original size
            dp.Width = _originalDataPointWidth;
            dp.Height = _originalDataPointHeight;
            dp.UpdateLayout();
            base.UpdateDataPoint(dp);
        }
    }

    void OnDataPointMouseEnter(object sender, MouseEventArgs e)
    {
        var dp = sender as DataPoint;
        if (dp != null)
        {
            //remember the original size and enlarge the data point
            _originalDataPointWidth = dp.ActualWidth;
            _originalDataPointHeight = dp.ActualHeight;
            dp.Width = dp.Height = IncreaseDataPointSizeTo.Value;
            dp.UpdateLayout();
            base.UpdateDataPoint(dp);
        }
    }
}

Этот класс можно использовать везде, где вы используете общий класс LineSeries.У него есть дополнительное свойство IncreaseDataPointSizeTo, которое содержит окончательный размер по ширине и высоте привязанной точки данных.

Пример кода xaml:

<charting:Chart>
    <charting:Chart.Series>
        <ext:ExtendedLineSeries IsSelectionEnabled="True"
                                IncreaseDataPointSizeTo="16" ...
...