MouseLeftButtonUp在DragMove之后从未调用过

时间:2014-01-14 18:22:27

标签: c# wpf drag

我在XAML中有一个元素,用于在单击元素并按住鼠标按钮时触发DragMove。

<Grid>
    <CheckBox x:Name="myCheckBox" IsChecked="{Binding IsDragging}">I am red square dragging!</CheckBox>
    <Rectangle x:Name="myRect" Width="100" Height="100" Fill="Red"/>
</Grid>

事件处理以下列方式完成代码隐藏:

    protected override void OnInitialized(EventArgs e)
    {
        base.OnInitialized(e);

        myRect.MouseLeftButtonDown += myRect_MouseLeftButtonDown;
        myRect.MouseLeftButtonUp += myRect_MouseLeftButtonUp;
    }

    void myRect_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        IsDragging = false;
    }

    void myRect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        IsDragging = true;
        DragMove();
    }

即使拖动工作,也永远不会调用myRect_MouseLeftButtonUp,因此在设置为true后,IsDragging永远不会设置为false。我如何使这项工作?

作为奖励,这是一个无条件的元素形象,哄你回答这个问题。

enter image description here

1 个答案:

答案 0 :(得分:-1)

DragMove是一个以MouseLeftButtonUp结尾的阻塞事件。使用

可以引发正确的行为
    void myRect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        IsDragging = true;
        DragMove();            
        myRect.RaiseEvent(new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left)
        {
            RoutedEvent = MouseLeftButtonUpEvent
        });
    }

另见C# WPF - DragMove and click