在mousedown上添加控件并拥有新控件可以获得mousedown

时间:2017-02-22 16:17:27

标签: c# wpf mouseevent

我有使用Thumb的矩形可以被拖动。可以通过单击并拖动矩形上的任何位置来拖动它们。

现在,我希望能够在父画布上添加一个居中用户所在的矩形。当我这样做时,我希望矩形能够接收到mousedown并且能够被拖动。

但是,在我鼠标向上并再次向下鼠标之前,矩形不会收到任何内容。

我尝试了previewMouseDown等,我尝试了e.Handled = true等,但它们都没有用。该事件始终由父画布使用。

是否有一种机制甚至可以像预览一样: 那么现在你设置为单击父画布,然后我添加矩形,哦,但现在你设置为单击矩形,所以最终我将mousedown给矩形。

1 个答案:

答案 0 :(得分:1)

我还没有看到你的代码,因此我不能肯定地说它...假设你使用来自mvvmlight的交互式eventtrigger进行mousedown ..你可以做的是在矩形类中实现你的mousedown命令,然后你应该可以拖动你的矩形... 假设你的c#中有一个canvas类(canvas.cs),在canvas.cs中,你有一个对象调用Rect(Rectangle Rect = new Rectangle(...)),你可以在你的矩形中实现你的mousedown命令。 cs而不是canvas.cs。有很多方法可以做到这一点..或者在你的xwindl of mainwindow中...你可以做引用Rect类的绑定。例如,在你的mainwindow.xaml.cs中,你将datacontext设置为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>