TranslateTransform на WPF Slidercontrol - PullRequest
0 голосов
/ 11 июня 2011

Я пытаюсь сделать так, чтобы, когда пользователь удерживал левую кнопку мыши, появлялся элемент управления ползунком, где мышь расположена, и пользователь мог перемещать элемент управления ползунком влево / вправо. Как только левая кнопка мыши будет удалена, она передаст значение в метод. Я полностью застрял на этом. У меня есть встроенный ползунок с позицией по умолчанию (позиция может варьироваться).

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

        private void Button_Click(object sender, RoutedEventArgs e)
    {
          TranslateTransform currentTransform = new TranslateTransform();
          currentTransform = slider.RenderTransform as TranslateTransform;
            currentTransform.X = Mouse.GetPosition(Deck_Door).X;
            currentTransform.Y = Mouse.GetPosition(Deck_Door).Y;

        slider.Visibility = Visibility.Visible;

    }

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 19 июня 2011

Мне удалось сделать это довольно легко.Я изменил код ползунка, добавив имя для translateTransform:

<Slider x:Name="slider" 
        TickFrequency="1"
        Value="1"
        IsSnapToTickEnabled="True"
    IsMoveToPointEnabled="True"
        Minimum="0"
        Maximum="10"
    ValueChanged="slider_ValueChanged"
        AutoToolTipPlacement="BottomRight"
        Grid.Column="0" VerticalAlignment="Top" Margin="0,-3,51.5,0"
        Thumb.DragCompleted="slider_DragCompleted" >
    <Slider.RenderTransform>
        <TranslateTransform x:Name="mySliderTransform" />
    </Slider.RenderTransform>
</Slider>

Затем я подключил событие нажатия кнопки и использовал следующий код:

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        slider.Visibility = Visibility.Visible;
        slider.Value = 1;

        // get the mouse positions
        string x = Mouse.GetPosition(this).X.ToString();
        string y = Mouse.GetPosition(this).Y.ToString();

        // convert the mouse position to a double
        var X = Convert.ToDouble(x);
        var Y = Convert.ToDouble(y);

        // reset the slider transform and apply the coordinates of the mouse position.
        mySliderTransform.X = 0;
        mySliderTransform.Y = 0;
        mySliderTransform.X = X - 20;
        mySliderTransform.Y = Y;
    }
0 голосов
/ 11 июня 2011

Сначала вы должны захватить мышьтогда вы должны рассчитать расстояние перемещения мыши

protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
   this.CaptureMouse();

    //Show slider here
}

protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
   this.ReleaseMouseCapture();

    //Hide slider here and get it's value
}

Point previousMousePosition;

protected override void OnPreviewMouseMove(MouseEventArgs e)
{
    if (this.IsMouseCaptured)
    {
        Point point = e.GetPosition(this);

        double d = point.X - previousMousePosition.X;

        //you can use this value to change the slider's value

        this.previousMousePosition = point;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...