我在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。我如何使这项工作?
作为奖励,这是一个无条件的元素形象,哄你回答这个问题。
答案 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
});
}