按钮单击“画布上未识别”

时间:2011-08-23 14:51:10

标签: wpf events button canvas

您好我有以下代码,我在画布上用按钮模板绘制一个按钮,当我点击按钮时我想要显示一条消息,但它没有,即使我注册了鼠标按钮上的事件仍然无法识别。

 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>

1 个答案:

答案 0 :(得分:1)

MouseLeftButtonDown标记为由Button处理,事件无法到达画布,而是使用PreviewMouseLeftButtonDown代替(因为它们使用不同的routing strategies此事件无法被Button拦截因为它首先在Canvas上升起。或者,您可以将事件ButtonBase.Click附加到Canvas,当然这只会记录Button-clicks。