1

以下に示すように、コンポーネントの可視性が変化したときに移動を開始したいと思います。それ以外の場合は、ユーザーが移動を開始するためにもう一度クリックする必要があり、それは私のアプリケーションの使いやすさの点で悪いためです。

 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;
        }
    }
4

2 に答える 2

0

唯一の方法は、反射を使用して親指の内部値を変更することだと思います。プロパティ「IsDragging」を変更します(テストされていません)。

于 2012-10-07T23:46:29.373 に答える
0

私はのソースコードThumbを調べましたが、より良い方法はMouseLeftButtonEvent親指でをシミュレートすることだと思います。

var evt = new MouseButtonEventArgs(mouseDevice, timestamp, MouseButton.Left)
{
    RoutedEvent = UIElement.MouseLeftButtonDownEvent
};
thumb.RaiseEvent(evt);
于 2016-09-16T06:27:28.817 に答える