如何泡一个孩子';s鼠标向下移动到C#WPF中的父级
本文关键字:移动 C#WPF 鼠标 孩子 何泡一 | 更新日期: 2023-09-27 18:00:52
我有一个带有<Image>
的WPF窗口,它的子FrameworkElement是<Rectangle>
。我想要的行为是在矩形上使用鼠标中键,使其可以在图像周围移动,并在<Rectangle>
或<Image>
上使用鼠标左键/鼠标右键,使矩形大小减小/增大。我可以在<Image>
周围拖动子<Rectangle>
,也可以通过矩形处理左/右单击。我如何让<Image>
处理左/右MouseDown,这样我就不必重复更改子对象和父对象中矩形大小的代码?
在这里你可以做类似的事情:
<Grid Background="Transparent" StackPanel.MouseDown="StackPanel_MouseDown">
<StackPanel Margin="70" Background="DarkGray" MouseDown="StackPanel_MouseDown">
<TextBlock x:Name="XTextBlock"></TextBlock>
</StackPanel>
</Grid>
代码背后:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void StackPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
if (sender.GetType().Name.Equals("StackPanel"))
{
XTextBlock.Text = "I am direct raised from StackPanel.";
}
else //sender.GetType().Name.Equals("Grid")
{
XTextBlock.Text += "I am bubble raised from Grid.";
}
}
}
希望这能解决你的问题。
要检查按下了哪个按钮,可以使用MouseButtonEventArgs。例如
if(e.ChangedButton == MouseButton.Left)
{
//do something
}
您可以使用PreviewMouseDown
来利用路由事件隧道行为,如下所示:
<Grid Background="Transparent" PreviewMouseDown="Grid_PreviewMouseDown">
<StackPanel Margin="70" Background="DarkGray" Grid.PreviewMouseDown="Grid_PreviewMouseDown">
<TextBlock x:Name="XTextBlock"></TextBlock>
</StackPanel>
</Grid>
代码背后:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (sender.GetType().Name.Equals("StackPanel"))
{
XTextBlock.Text += ", I am tunneled raised from StackPanel.";
}
else //sender.GetType().Name.Equals("Grid")
{
XTextBlock.Text = "I am direct raised from Grid.";
}
}
}
希望这会有所帮助。保持编码:(
查看Thumb控件。你可以很容易地设置一个9个拇指的网格,就像这样:
+--+-----------+--+
| | | |
+--+-----------+--+
| | | |
| | | |
| | | |
| | | |
| | | |
+--+-----------+--+
| | | |
+--+-----------+--+
为每个拇指分配适当的光标,并根据拇指的位置处理拇指的拖动事件。它比自己处理鼠标向下/向上/移动事件更健壮。