在 mousedown 上添加控件并让新控件获取 mousedown
Adding controls on mousedown and having new control get the mousedown
我有使用 Thumb 的矩形,可以四处拖动。可以通过单击并拖动矩形上的任意位置来拖动它们。
现在,我希望能够在用户鼠标悬停在父级 canvas 的位置中心添加一个矩形。当我这样做时,我希望矩形接收 mousedown 并能够被拖动。
但是,在我再次向上和向下移动鼠标之前,矩形什么也接收不到。
我尝试了 previewMouseDown 等,我尝试了 e.Handled = true 等,但其中 none 有效。该事件始终由父级 canvas.
使用
是否有一种甚至高于预览的机制,可以是这样的:
好吧,现在您设置为单击父级 canvas,然后我添加矩形,哦,但是现在您设置为单击矩形,所以最终我会将 mousedown 给矩形。
我还没有看到你的代码,因此我不能肯定地说。假设你使用 mvvmlight 的交互事件触发器进行 mousedown。你可以做的是在矩形内实现你的 mousedown 命令 class,那么你应该可以拖动你的矩形......
假设如果你的 c# 中有一个 canvas class (canvas.cs),在你的 canvas.cs 中,你有一个对象调用 Rect (Rectangle Rect = new Rectangle(... )), 你可以在 rectangle.cs 而不是 canvas.cs 中实现你的 mousedown 命令。有很多方法可以做到这一点……或者在主窗口的 xaml 中……您可以进行引用 Rect class 的绑定。例如,在您的 mainwindow.xaml.cs 中,您将数据上下文设置为 Canvas.cs.. 在您的 mainwindow.xaml 中,您可以像这样绑定 mousedown:
<Window
xmlns:i="clr namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown or PreviewMouseDown">
<cmd:EventToCommand Command="{Binding Canvas.Rect.MouseDownCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Window>
或者,您也可以
<Your Control Here>
<Border>
<Border.InputBinding>
<MouseBinding MouseAction="LeftClick" Command="{Binding DataContext.SomeCommand}"/>
</Border.InputBindings>
</Border>
</Your Control Here>
我有使用 Thumb 的矩形,可以四处拖动。可以通过单击并拖动矩形上的任意位置来拖动它们。
现在,我希望能够在用户鼠标悬停在父级 canvas 的位置中心添加一个矩形。当我这样做时,我希望矩形接收 mousedown 并能够被拖动。
但是,在我再次向上和向下移动鼠标之前,矩形什么也接收不到。
我尝试了 previewMouseDown 等,我尝试了 e.Handled = true 等,但其中 none 有效。该事件始终由父级 canvas.
使用是否有一种甚至高于预览的机制,可以是这样的: 好吧,现在您设置为单击父级 canvas,然后我添加矩形,哦,但是现在您设置为单击矩形,所以最终我会将 mousedown 给矩形。
我还没有看到你的代码,因此我不能肯定地说。假设你使用 mvvmlight 的交互事件触发器进行 mousedown。你可以做的是在矩形内实现你的 mousedown 命令 class,那么你应该可以拖动你的矩形...... 假设如果你的 c# 中有一个 canvas class (canvas.cs),在你的 canvas.cs 中,你有一个对象调用 Rect (Rectangle Rect = new Rectangle(... )), 你可以在 rectangle.cs 而不是 canvas.cs 中实现你的 mousedown 命令。有很多方法可以做到这一点……或者在主窗口的 xaml 中……您可以进行引用 Rect class 的绑定。例如,在您的 mainwindow.xaml.cs 中,您将数据上下文设置为 Canvas.cs.. 在您的 mainwindow.xaml 中,您可以像这样绑定 mousedown:
<Window
xmlns:i="clr namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF45">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown or PreviewMouseDown">
<cmd:EventToCommand Command="{Binding Canvas.Rect.MouseDownCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Window>
或者,您也可以
<Your Control Here>
<Border>
<Border.InputBinding>
<MouseBinding MouseAction="LeftClick" Command="{Binding DataContext.SomeCommand}"/>
</Border.InputBindings>
</Border>
</Your Control Here>