我在从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
被调用。
你知道为什么吗?
答案 0 :(得分:1)
您已设置Window
或UserControl
mouseUp事件,因此:
当您执行MouseUp时,光标必须位于Window
或UserControl
的表面上,而不是Button
或网格上,因此它可以触发MouseUp事件。< / p>
要解决此问题,请添加:
protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
m_Grid.Children.Clear();
base.OnPreviewMouseLeftButtonUp(e);
}