0

WPFキャンバス用に作成したUserControl(CardGUI)があり、以下のようにUserControlにMouseEventsを実装しました。UserControlをツールボックスからキャンバスにドラッグすると問題なく動作しますが、新しいコントロールを追加しようとすると、CardGUI card = new 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;

コントロールを追加するメソッドは1回しか呼び出されないため、イベントがトリガーされても場所は実際には更新されない可能性があります。ツールボックスからコントロールをドラッグした場合、その問題は発生しませんでした。

4

1 に答える 1

0

キャンバスに追加していますが、位置やサイズを設定していません

追加してみてください:

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

または、利用可能なサイズに自動ストレッチする場合は、代わりにグリッドを使用します(マージンの使用が推測しているようです)

于 2012-08-15T15:00:58.040 に答える