我想在 MouseDown 事件处理程序中创建一个 WPF Thumb 对象。只要用户按住鼠标,他们就应该能够拖动 Thumb 对象。但是,鼠标事件不会转发到我的新 Thumb 对象。事实上,我怀疑对象是在当前执行的线程有缓刑之前创建的。如何在拖动模式下启动 Thumb?如果我以 Input 优先级调度一些代码,我可以做些什么来以编程方式开始对 Thumb 对象的拖动操作?

最佳答案

由于缺少代码,我假设您的意思是“在 MouseDown 事件处理程序中创建 WPF Thumb 对象”。下面就够了吗?

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Canvas Name="RootCanvas" Background="White"/>
</Window>
    public MainWindow()
    {
        InitializeComponent();
        RootCanvas.MouseDown += (s, e) =>
        {
            Thumb thumb = new Thumb();
            thumb.Width = thumb.Height = 35;
            thumb.Background = new SolidColorBrush(Colors.Red);

            Canvas.SetLeft(thumb, e.GetPosition((Canvas)s).X - thumb.Width / 2);
            Canvas.SetTop(thumb, e.GetPosition((Canvas)s).Y - thumb.Height / 2);

            thumb.DragDelta += (d, r) =>
            {
                Canvas.SetLeft((UIElement)d, Canvas.GetLeft((UIElement)d) + r.HorizontalChange);
                Canvas.SetTop((UIElement)d, Canvas.GetTop((UIElement)d) + r.VerticalChange);
            };

            ((Canvas)s).Children.Add(thumb);
            Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() => thumb.RaiseEvent(e)));
        };
    }

[编辑]

这是“几乎”工作示例。出于某种原因,在第一次 thumb.DragDelta 时,r.HorizontalChanger.VerticalChange 的值不是鼠标增量的值,而是鼠标增量减去当前拇指位置的值,这具有将拇指放置在 (0,0) ish 的净效果。

[编辑2]

更新到工作。

关于c# - 在 MouseDown 中创建 Thumb 并拖动它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16292068/

10-12 12:24