从C#代码创建WPF椭圆,然后用鼠标移动它

本文关键字:然后 鼠标 移动 椭圆 代码 创建 WPF | 更新日期: 2024-09-21 12:54:06

我有一个画布,我需要在上面放一个(例如)椭圆,不是来自XAML,而是来自代码。所以我做

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

根据Rohit Vats的回答,只需添加

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

'因为默认情况下Fill为null,不会对鼠标事件做出响应

从C#代码创建WPF椭圆,然后用鼠标移动它

您需要将Fill设置为Transparent,以便它能够对鼠标事件做出反应。默认情况下,Fill是不响应鼠标事件的null-

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

更新

从XAML代码中可以明显看出,您将Fill设置为#FFF4F4F5,而不是从代码后面进行设置。

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