我有一个<Image>
的WPF窗口,它的子FrameworkElement有一个<Rectangle>
。我想要的行为是矩形上的中鼠标按钮允许它在图像上移动,而左/右鼠标在<Rectangle>
或<Image>
上移动以使矩形减少/增加尺寸。我在<Rectangle>
工作周围拖动了孩子<Image>
,并且通过矩形处理了左/右点击。如何让{/ 1}}处理Left / Right MouseDown,这样我就不必复制用于更改子节点和父节点中矩形大小的代码了?
答案 0 :(得分:0)
您可以在此处执行以下操作:
<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.";
}
}
}
希望这能解决您的问题。
答案 1 :(得分:0)
您可以使用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.";
}
}
}
希望这会有所帮助。继续编码:)
答案 2 :(得分:0)
要检查按下了哪个按钮,可以使用MouseButtonEventArgs。 例如
if(e.ChangedButton == MouseButton.Left)
{
//do something
}
答案 3 :(得分:0)
查看Thumb控件。你可以轻松地设置一个9个大小的网格:
+--+-----------+--+
| | | |
+--+-----------+--+
| | | |
| | | |
| | | |
| | | |
| | | |
+--+-----------+--+
| | | |
+--+-----------+--+
为每个拇指指定适当的光标,并根据其位置处理拇指的拖动事件。它比处理自己鼠标按下/向上/移动事件的方式更强大。