您好我有以下代码,我在画布上用按钮模板绘制一个按钮,当我点击按钮时我想要显示一条消息,但它没有,即使我注册了鼠标按钮上的事件仍然无法识别。
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Button r = e.Source as Button;
if (r != null)
MessageBox.Show(r.ToString());
Point mousePoint = Mouse.GetPosition(mainCanvas);
Button button1 = new Button();
button1.Template = (ControlTemplate)this.FindResource("nodeTemplate");
Canvas.SetTop(button1, mousePoint.Y);
Canvas.SetLeft(button1, mousePoint.X);
mainCanvas.Children.Add(button1);
}
}
<Window.Resources>
<ControlTemplate x:Key="nodeTemplate" TargetType="Button">
<Grid>
<Ellipse x:Name="outerCircle" Fill="Red" Height="50" Width="50"/>
<Ellipse x:Name="innerCircle" Fill="Green" RenderTransformOrigin=".5,.5">
<Ellipse.RenderTransform>
<ScaleTransform ScaleX=".9" ScaleY=".9"/>
</Ellipse.RenderTransform>
</Ellipse>
</Grid>
</ControlTemplate>
</Window.Resources>
<DockPanel>
<Canvas x:Name="mainCanvas" Background="Transparent" MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
</Canvas>
</DockPanel>
答案 0 :(得分:1)
MouseLeftButtonDown
标记为由Button处理,事件无法到达画布,而是使用PreviewMouseLeftButtonDown
代替(因为它们使用不同的routing strategies此事件无法被Button拦截因为它首先在Canvas上升起。或者,您可以将事件ButtonBase.Click
附加到Canvas,当然这只会记录Button-clicks。