Is there a way?

A forum dedicated to WPF version of LightningChart Ultimate.

Moderator: Queue Moderators

Post Reply
LanceAllen
Posts: 1
Joined: Thu Nov 30, 2023 2:33 pm

Is there a way?

Post by LanceAllen » Fri Dec 22, 2023 9:01 am

I'm utilizing bands and wish to enable mouse interaction, including mouse resize and move. However, I'm interested in implementing a "StepSize" feature, restricting valid values to increments like 1.0, 1.5, 2.0, 2.5, 3.0, and so on. Is there a way to achieve this functionality?

ArctionKestutis
Posts: 555
Joined: Mon Mar 14, 2016 9:22 am

Re: Is there a way?

Post by ArctionKestutis » Fri Dec 22, 2023 2:07 pm

For such kind of functionality event handlers are very useful. You can subscribe to band.ValuesChanged event and in event handler implement value change logic as you wish. For example, you can compare new band's value to some reference (+-) step-value:

Code: Select all

        double _dBegin;
        double _dEnd;

        private void BandX_ValuesChanged(object sender, ValuesChangedEventArgs e)
        {
            _chart.BeginUpdate();

            double step = 5;

            if(_dBegin + step == Math.Round(e.NewBeginValue) || _dBegin - step == Math.Round(e.NewBeginValue))
            {
                _dBegin = Math.Round(e.NewBeginValue);
                Band bandX = sender as Band;
                bandX.ValuesChanged -= BandX_ValuesChanged;
                bandX.ValueBegin = _dBegin;
                bandX.ValuesChanged += BandX_ValuesChanged;
            }
            else
            {
                Band bandX = sender as Band;
                bandX.ValuesChanged -= BandX_ValuesChanged;
                bandX.ValueBegin = _dBegin;
                bandX.ValuesChanged += BandX_ValuesChanged;
            }

            if (_dEnd + step == Math.Round(e.NewEndValue) || _dEnd - step == Math.Round(e.NewEndValue))
            {
                _dEnd = Math.Round(e.NewEndValue);
                Band bandX = sender as Band;
                bandX.ValuesChanged -= BandX_ValuesChanged;
                bandX.ValueEnd = _dEnd;
                bandX.ValuesChanged += BandX_ValuesChanged;
            }
            else
            {
                Band bandX = sender as Band;
                bandX.ValuesChanged -= BandX_ValuesChanged;
                bandX.ValueEnd = _dEnd;
                bandX.ValuesChanged += BandX_ValuesChanged;
            }

            _chart.EndUpdate();
        }
Hope this helps.
All the best

Post Reply