在鼠标上下事件中发送相同对象的按钮
本文关键字:对象 按钮 鼠标 上下 事件 | 更新日期: 2023-09-27 18:08:42
我在WPF窗口中创建了2个按钮,并为两个按钮添加了鼠标上下事件。我在一个按钮上鼠标向下,在第二个按钮上鼠标向上。但我得到相同的第一个按钮对象在两个事件的事件处理程序。我的问题是为什么我没有在鼠标向上事件中获得第二个按钮对象。
这是我的XAML<Window x:Class="MouseDownUpSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="but1" Content="source" HorizontalAlignment="Left" Margin="86,68,0,0" VerticalAlignment="Top" Width="75" PreviewMouseLeftButtonDown="Button_MouseDown" PreviewMouseLeftButtonUp="Button_MouseUp" />
<Button x:Name="but2" Content="destination" HorizontalAlignment="Left" Margin="406,164,0,0" VerticalAlignment="Top" Width="75" PreviewMouseLeftButtonDown="Button_MouseDown" PreviewMouseLeftButtonUp="Button_MouseUp"/>
</Grid>
代码 public partial class MainWindow : Window
{
string source = null;
string destination = null;
public MainWindow()
{
InitializeComponent();
}
private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
Button src=sender as Button;
source = src.Content as string;
}
private void Button_MouseUp(object sender, MouseButtonEventArgs e)
{
Button src = sender as Button;
destination = src.Content as string;
if(destination.Equals(source))
{
}
}
我正试图通过拖动&下降
我的问题是为什么我没有得到第二个按钮对象在鼠标向上事件。
因为这就是按钮的工作方式。
摘自MSDN:
当鼠标指针在窗体或控件上时按下鼠标按钮,该对象将"捕获"鼠标并接收所有鼠标事件,包括最后一个MouseUp事件。
你可能会感兴趣:
如果连续按下鼠标按钮,则在第一次按下鼠标后捕获鼠标的对象接收所有鼠标事件,直到所有按钮被释放。
Mouse.MouseDown
在按下任何一个鼠标按钮时出现,而Mouse.MouseUp
在释放任何一个鼠标按钮时出现。所以当你点击一个按钮MouseUp
事件总是跟着MouseDown
事件,因为它们是连续的事件。因此,在本例中,if()
条件始终是true
。
if(destination.Equals(source))
{
//always executed;
}
我通过WPF拖动实现了我的目标&使用拖拽效果。复制
XAML
<Window x:Class="MouseDownUpSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="but1" Content="source" HorizontalAlignment="Left" Margin="86,68,0,0" VerticalAlignment="Top"
Width="75" PreviewMouseMove="but_MouseMove" AllowDrop="True" PreviewDrop="but_Drop" />
<Button x:Name="but2" Content="destination" HorizontalAlignment="Left" Margin="406,164,0,0" VerticalAlignment="Top"
Width="75" PreviewMouseMove="but_MouseMove" AllowDrop="True" PreviewDrop="but_Drop"/>
</Grid>
代码 public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void but_MouseMove(object sender, MouseEventArgs e)
{
Button src=sender as Button;
if (src != null && e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop(src,
src.Content.ToString(),
DragDropEffects.Copy);
}
}
private void but_Drop(object sender, DragEventArgs e)
{
Button dest = sender as Button;
string destinationContent = null;
destinationContent = dest.Content as string;
if (dest != null)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string sourceContent = (string)e.Data.GetData(DataFormats.StringFormat);
if (destinationContent.Equals(sourceContent))
{
Console.WriteLine("equal");
}
}
}
}
}