在Grid.Children.Clear()上不调用MouseUp

时间:2012-10-03 06:18:39

标签: c# wpf grid mouse

我在从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被调用。

你知道为什么吗?

1 个答案:

答案 0 :(得分:1)

您已设置WindowUserControl mouseUp事件,因此: 当您执行MouseUp时,光标必须位于WindowUserControl的表面上,而不是Button或网格上,因此它可以触发MouseUp事件。< / p>

要解决此问题,请添加:

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