如何在Thumb上引发DragDelta事件

时间:2012-07-13 19:23:12

标签: wpf events wpf-controls drag raise

如下所示,我想在组件可见性发生变化时开始移动。 因为否则我需要用户再次点击以开始移动,这对我的应用程序的可用性而言是不好的。

 public MoveILayoutControl()
    {
        InitializeComponent();
        this.IsVisibleChanged += new DependencyPropertyChangedEventHandler(MoveILayoutControl_IsVisibleChanged);
        this.moveThumb.DragDelta += new DragDeltaEventHandler(MoveThumb_DragDelta);
    }

    void MoveILayoutControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        if (this.IsVisible)
        {
            // Raise Drag Event !?
        }
    }

    private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        var myData = DataContext as ILayoutVisual;

        if (myData != null)
        {
            Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);

            if (myData.Rotation != 0)
            {
                Matrix toCalculate = ((this.Parent as FrameworkElement).RenderTransform).Value;
                if (toCalculate != null)
                {
                    dragDelta = toCalculate.Transform(dragDelta);
                }
            }
            myData.X += dragDelta.X;
            myData.Y += dragDelta.Y;
        }
    }

2 个答案:

答案 0 :(得分:0)

我认为唯一的方法是使用反射来改变拇指的内部值。更改属性“IsDragging”(未测试)。

答案 1 :(得分:0)

我查了source code of Thumb,我认为更好的方法是在拇指上模拟MouseLeftButtonEvent

var evt = new MouseButtonEventArgs(mouseDevice, timestamp, MouseButton.Left)
{
    RoutedEvent = UIElement.MouseLeftButtonDownEvent
};
thumb.RaiseEvent(evt);