我想在MouseDown事件处理程序中创建一个WPF Thumb对象。只要用户按住鼠标,他们就应该能够拖动Thumb对象。但是,鼠标事件不会转发到我的新Thumb对象。实际上,我怀疑在当前正在执行的线程有一个缓存之前实际创建了该对象。如何在拖动模式下启动Thumb?如果我在输入优先级调度一些代码,我该怎么做才能以编程方式开始在Thumb对象上执行拖动操作?
答案 0 :(得分:4)
由于缺少代码,我认为你的意思是“在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。
[EDIT2]
已更新至正在使用。