Ограничить событие перемещения мыши внутри строки сетки - wpf c# - PullRequest
0 голосов
/ 04 мая 2020

У меня есть кнопка внутри панели, как показано ниже. Я должен переместить GLControl внутри этой панели куда угодно. Но при попытке, как показано ниже, GLControl удаляется от панели при перемещении кнопки к границе панели. Как я могу ограничить движение кнопки только внутри панели?

<WindowsFormsHost  x:Name="windowsFormsHost1"  Grid.Row="5"   Grid.ColumnSpan="3"   Initialized="WindowsFormsHost_Initialized"    >
<wf:Panel x:Name="Panel_glcontrol" Dock="None" BackColor="yellow">
       <wf:Panel.Controls>
          <opentk:GLControl x:Name="glControl" Width="450" Height="299"
     Dock="None" MouseMove="GlControl_MouseMove" MouseDown="GlControl_MouseDown"  Resize="glControl_Resize" Paint="glControl_Paint"  />  
       </wf:Panel.Controls>
</wf:Panel>
</WindowsFormsHost>

  private System.Drawing.Point MouseDownLocation;
  private void GlControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
                glControl.Left = e.X + glControl.Left - MouseDownLocation.X;
                glControl.Top = e.Y + glControl.Top - MouseDownLocation.Y;
        }
    }

    private void GlControl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            MouseDownLocation = e.Location;
        }
    }

1 Ответ

0 голосов
/ 04 мая 2020

Похоже, больше вопрос WinForms. Попробуйте установить ограничение на код, который используется для обновления контрольной позиции. Например:

glControl.Left = Math.Min(panel.Width - glControl.Width, e.X + glControl.Left - MouseDownLocation.X);
glControl.Top = Math.Min(panel.Height - glControl.Height, e.Y + glControl.Top - MouseDownLocation.Y);
...