在 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>