我在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,因此IsDragging在设置为true后永远不会设置为false。我该怎么做呢?
作为额外的奖励,这里有一个免费的元素图像,可以诱使您回答这个问题。

发布于 2014-01-15 02:32:24
DragMove是以MouseLeftButtonUp结尾的阻塞事件。可以使用以下命令来诱导正确的行为
void myRect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
IsDragging = true;
DragMove();
myRect.RaiseEvent(new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left)
{
RoutedEvent = MouseLeftButtonUpEvent
});
}https://stackoverflow.com/questions/21121044
复制相似问题