2013-12-14 26 views
1

我有一个画布,我需要在其上放置(例如)椭圆,而不是从XAML,而是从代码。所以我做从C#代码创建WPF椭圆并通过鼠标移动它

Ellipse e1; 

public MainWindow() 
    { 
     ... 
     ... 
     e1 = new Ellipse(); 
     e1.Height = 100; 
     e1.Width = 100; 
     e1.Stroke = Brushes.Red; 
     e1.StrokeThickness = 5; 
     Canvas.SetLeft(e1,40); 
     Canvas.SetTop(e1,50); 
     e1.MouseDown += ellipse_MouseDown; 
     Canvas1.Children.Add(e1); 

    } 

    private void ellipse_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     Ellipse el = (Ellipse)sender; 
     el.Stroke = Brushes.Green; 
     buttonAdd.Content = "New_TEXT"; 

    } 

但它不会对点击作出反应。无论如何,我试图将这个ellipse_MouseDown方法添加到从XAML创建的椭圆中 - 并且它可以工作。

<Canvas x:Name="Canvas1" HorizontalAlignment="Left" Height="421" Margin="10,10,0,0" VerticalAlignment="Top" Width="346"> 
     <Ellipse x:Name="ellipse" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="111" Margin="117,152,0,0" Stroke="Black" VerticalAlignment="Top" Width="131" MouseDown="ellipse_MouseDown" MouseMove="ellipse_MouseMove" MouseUp="ellipse_MouseUp"/> 
    </Canvas> 

哪里有问题?

UPD。

根据罗希特大桶的回答只是默认Fill添加

e1.Fill = Brushes.Transparent; 

or 

e1.Fill = new SolidColorBrush((Color)ColorConverter 
             .ConvertFromString("#FFF4F4F5")); 

”的原因是空不响应鼠标事件

+0

请显示可用的XAML,以便我们可以将其与不包含的代码进行比较。 –

回答

1

您需要设置FillTransparent,以便它可以反应到鼠标事件。默认情况下,Fillnull不响应鼠标事件 -

e1.Stroke = Brushes.Red; 
e1.Fill = Brushes.Transparent; <-- HERE 

UPDATE

从XAML代码可以明显看出,要设置Fill到#FFF4F4F5但是从后面的代码没有设置它。

e1.Fill = new SolidColorBrush((Color)ColorConverter 
             .ConvertFromString("#FFF4F4F5")); 
+0

谢谢,它现在工作正常。 – aGGeRReS

+0

太好了。如果您不希望它透明,我已使用'Fill'颜色进行更新。希望它能解决你的问题。 :) –