我想在 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.HorizontalChange
和 r.VerticalChange
的值不是鼠标增量的值,而是鼠标增量减去当前拇指位置的值,这具有将拇指放置在 (0,0) ish 的净效果。[编辑2]
更新到工作。
关于c# - 在 MouseDown 中创建 Thumb 并拖动它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16292068/