0

我在派生自的类中有此代码UserControl(从Window派生时的行为相同)。该代码是一个项目中的一个非常简单的示例(隔离问题),我只想在鼠标按下和鼠标向上之间用鼠标移动一些行(我不能直接引用这些行),唯一的方法是删除它们并再次将它们添加到正确的位置。

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    m_Grid.Children.Clear( );
    m_Grid.Children.Add(new Button());
    base.OnMouseLeftButtonDown(e);
}

protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
    m_Grid.Children.Clear();
    base.OnMouseLeftButtonUp(e);
}

m_Grid像这样声明的地方:

private readonly Grid m_Grid;

这种形式OnMouseLeftButtonUp永远不会被调用。如果我删除:

m_Grid.Children.Clear( );
m_Grid.Children.Add(new Button());

OnMouseLeftButtonUp被调用。

你知道为什么吗?

4

1 回答 1

1

在这里,您已经设置了Window's 或UserControlmouseUp 事件:当您执行 MouseUp 时,光标必须位于WindoworUserControl的表面上,而不是在Button网格上的 or 上,因此它可以触发 MouseUp 事件。

要解决此问题,请添加:

protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            m_Grid.Children.Clear();
            base.OnPreviewMouseLeftButtonUp(e);
        }
于 2012-10-03T07:31:50.157 回答