Как переместить элемент управления на панели с помощью мыши - PullRequest
1 голос
/ 25 июля 2011

Я не могу переместить пограничный контроль, когда мышь находится за пределами границы.

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication2"
  x:Class="WpfApplication2.MainWindow"
  x:Name="Window"
  Title="Window1"
  Width="346.5" Height="215" WindowStyle="SingleBorderWindow" >

    <Grid Name="stack" >

        <Border x:Name="btn" Width="50" Height="20" VerticalAlignment="Top" BorderThickness="1" BorderBrush="Black" Background="#FFF50000"
                MouseMove="btn_MouseMove" MouseDown="btn_MouseDown" MouseUp="btn_MouseUp"  />
    </Grid>
</Window> 

Код позади

bool state = false;
Point prePoint;

private void btn_MouseMove(object sender, MouseEventArgs e)
{
    if (state)
    {
        Point p = e.GetPosition(this);
        Point p2 = e.GetPosition(btn);
        btn.Margin = new Thickness(0, p.Y - p2.Y + p.Y - prePoint.Y, 0, 0);
        prePoint = e.GetPosition(this);
    }
}
private void btn_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (sender == btn)
    {
        prePoint = e.GetPosition(this);
        state = true;
    }
}

private void btn_MouseUp(object sender, MouseButtonEventArgs e)
{
    state = false;
}

Ответы [ 2 ]

1 голос
/ 25 июля 2011

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

0 голосов
/ 25 июля 2011

Просто захватите мышь, когда она находится внутри границы, и отпустите ее после завершения задачи, иначе она будет придерживаться. ИЛИ в соотв. к вашему коду это может быть так ->

bool state = false;
Point prePoint;

private void btn_MouseMove(object sender, MouseEventArgs e)
{
if (state)
{
    Point p = e.GetPosition(this);
    Point p2 = e.GetPosition(btn);
    btn.Margin = new Thickness(0, p.Y - p2.Y + p.Y - prePoint.Y, 0, 0);
    prePoint = e.GetPosition(this);
    // Capture Mouse here ! as far as i think. !!!
    Mouse.Capture(this.ColorPlane, CaptureMode.Element);
}
else
{
    // Release Mouse here ! as far as i think. !!!
    Mouse.Capture(null);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...