使用新语句时,UserControl不与MouseEvent一起移动?

时间:2012-08-15 14:45:21

标签: c# wpf user-controls

我有一个为我的WPF画布创建的UserControl(CardGUI),我在UserControl上实现了MouseEvents,如下所示。事情是当我将UserControl从工具箱拖到画布上时,它工作得很好,但是当我尝试添加一个新控件时,CardGUI卡=新的CardGUI();在我的MainForm中,我无法移动控件,我无法弄清楚为什么会这样。

我试过调试但是当我点击新添加的控件时事件仍然被触发,但是我无法移动它。

public void UserControl_MouseLeftButtonDown(object sender, 
                                            MouseButtonEventArgs e)
{
    if (!inDrag)
    {
        anchorPoint = e.GetPosition(null);
        CaptureMouse();
        inDrag = true;
        e.Handled = true;
    }
}

public void UserControl_MouseMove(object sender, MouseEventArgs e)
{
    if (inDrag)
    {
        currentPoint = e.GetPosition(null);       
        Canvas.SetLeft(this, 
                       Canvas.GetLeft(this) + 
                           (currentPoint.X - anchorPoint.X));
        Canvas.SetTop(this, 
                      Canvas.GetTop(this) + 
                         (currentPoint.Y - anchorPoint.Y));
        anchorPoint = currentPoint;
        e.Handled = true;
    }
}

public void UserControl_MouseLeftButtonUp(object sender, 
                                          MouseButtonEventArgs e)
{
    if (inDrag)
    {
        ReleaseMouseCapture();
        inDrag = false;
        e.Handled = true;
    }
}

我将控件添加到我的主窗体中,如:

        this.deckCard = new CardGUI();            
        this.deckCard.Margin = new Thickness(xDeckCoord, yDeckCoord, 0, 0);
        this.main.Children.Add(this.deckCard);
        this.deckCard.IsHitTestVisible = true;
        this.deckCard.AllowDrop = true;

我认为可能是因为添加控件的方法只被调用一次,所以当事件被触发时,该位置并不真正更新。如果我从ToolBox拖动控件,我没有遇到这个问题。

1 个答案:

答案 0 :(得分:0)

您正在将其添加到画布,但未设置任何位置或大小

尝试添加:

this.main.SetLeft(deckCard, 0);
this.main.SetTop(deckCard, 0);

或者如果你想让东西自动伸展到可用的大小(你使用Margin似乎推断出来),或者使用网格