2013-12-14 29 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'顏色進行更新。希望它能解決你的問題。 :) –