Skip to main content

Microsoft Silverlight

Answered Question click on position to move sliderRSS Feed

(0)

skm.software@yahoo.com
skm.soft...

Member

Member

196 points

216 Posts

click on position to move slider

Hi

I am using slider control in a project in silverlight 2,
To change the position of movable slider bar on horizontal line
we have to drag the movable slider bar from mouse to that position in horizontlal
line of slider control,
But I need functionallity that when I click on a certain
position of horizontal bar, the slider(movable bar) will automatically
move to that position.

 

Sachin Mukhija
"Please Mark as answer if answer is correct".

fullsailrick
fullsail...

Contributor

Contributor

3699 points

829 Posts

Re: click on position to move slider

Handle the MouseLeftButtonDown on the Slider. Use MouseEventArgs e.GetPosition(theSliderControl).X to get an offset of where they've clicked. Then take the offset and set the position.

sunstate9
sunstate9

Member

Member

66 points

25 Posts

Re: click on position to move slider

You have to get mouse position for the moveing scrollbar so

in mouseleftbuttondown(object e,mousetEventargs e)

{

point p=new point();

p=e.getposition(this);

//Now you should assigen p.x to slider as you wish...

If it may help U ,

Mark as answer

Mog Liang - MSFT
Mog Lian...

All-Star

All-Star

15884 points

1,541 Posts

Answered Question

Re: click on position to move slider

Slider don't implement the MouseLeftButtonDown event, so we can't capture mouse action by handling this event.

I write a slider inherent from Slider, exposed  custom Click event.

CustomSlider Code:

   public class CustomSlider: Slider
    {
        public CustomSlider()
        {
            DefaultStyleKey = typeof(Slider);
        }
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            RepeatButton rb;
            rb = base.GetTemplateChild("HorizontalTrackLargeChangeIncreaseRepeatButton") as RepeatButton;
            rb.MouseMove += new MouseEventHandler(rb_MouseMove);
            rb.Click += new RoutedEventHandler(rb_Click);
            rb = base.GetTemplateChild("HorizontalTrackLargeChangeDecreaseRepeatButton") as RepeatButton;
            rb.MouseMove += new MouseEventHandler(rb_MouseMove);
            rb.Click += new RoutedEventHandler(rb_Click);
            rb = base.GetTemplateChild("VerticalTrackLargeChangeIncreaseRepeatButton") as RepeatButton;
            rb.Click += new RoutedEventHandler(rb_Click);
            rb.MouseMove += new MouseEventHandler(rb_MouseMove);
            rb = base.GetTemplateChild("VerticalTrackLargeChangeDecreaseRepeatButton") as RepeatButton;
            rb.Click += new RoutedEventHandler(rb_Click);
            rb.MouseMove += new MouseEventHandler(rb_MouseMove);

            //rb.
        }

        Point ps;
        void rb_MouseMove(object sender, MouseEventArgs e)
        {
            ps=e.GetPosition(this);
        }

        public event EventHandler MyClickEvent;
        void rb_Click(object sender, RoutedEventArgs e)
        {
            if(MyClickEvent!=null)
                MyClickEvent(this,new PositionEventArgs(ps));
        }
    }
    public class PositionEventArgs : EventArgs
    {
        public Point Position { set; get; }
        public PositionEventArgs() { }
        public PositionEventArgs(Point p) { Position = p; }
    }

 

Then, we use this slider to implement "click and positioning" job. 

XAML:

<my:CustomSlider Name="sl1" MyClickEvent="CustomSlider_MyClickEvent_1"/>

XAML code behind:

        private void CustomSlider_MyClickEvent_1(object sender, PositionEventArgs e)
        {
            double progress = sl1.Maximum * e.Position.X / sl1.ActualWidth;
            sl1.Value = progress;
        }
 

Mog Liang
Microsoft Online Community Support

Please remember to mark the replies as answers if they help and unmark them if they provide no help.
  • Unanswered Question
  • Answered Question
  • Announcement
Microsoft Communities