使用C#和WPF在代码中绘制线条

我正在尝试使用7段显示器创建数字时钟显示器。 我可以使用这样的代码在XAML中绘制线条:

 

但是当我尝试在代码中执行此操作时(来自MainWindow()),它不起作用:

  Line line = new Line(); Thickness thickness = new Thickness(101,-11,362,250); line.Margin = thickness; line.Visibility = System.Windows.Visibility.Visible; line.StrokeThickness = 4; line.Stroke = System.Windows.Media.Brushes.Black; line.X1 = 10; line.X2 = 40; line.Y1 = 70; line.Y2 = 70; 

我的想法是我可以绘制7行,然后根据不同数字的需要切换其可见性。 我确信这可以通过多种方式完成,但为什么我不能在这样的代码中绘制线条?

那是你的整个绘图代码吗? 如果是这样,则需要将line对象添加到曲面。 如果您使用的是Canvas,例如:

 myCanvas.Children.Add(line); 

这会将您的线条添加到canvas中。 目前,你只是创建了这条线,但没有把它放在任何地方。

您可以在此MSDN页面上找到有关在WPF中绘图的更多信息。

 public class Cls_Barriere { // animazione periferica public static void LineAnimation(Line _line,String _colore) { Storyboard result = new Storyboard(); Duration duration = new Duration(TimeSpan.FromSeconds(2)); ColorAnimation animation = new ColorAnimation(); animation.RepeatBehavior = RepeatBehavior.Forever; animation.Duration = duration; switch (_colore.ToUpper()) { case "RED": animation.From = Colors.Red; break; case "ORANGE": animation.From = Colors.Orange; break; case "YELLOW": animation.From = Colors.Yellow; break; case "GRAY": animation.From = Colors.DarkGray; break; default: animation.From = Colors.Green; break; } animation.To = Colors.Gray; Storyboard.SetTarget(animation, _line); Storyboard.SetTargetProperty(animation, new PropertyPath("(Line.Stroke).(SolidColorBrush.Color)")); result.Children.Add(animation); result.Begin(); } } //*************************************************************************** public partial class MainPage : UserControl { public Line _line; public MainPage() { InitializeComponent(); Canvas.MouseLeftButtonDown += Canvas_MouseLeftButtonDown; Canvas.MouseLeftButtonUp += Canvas_MouseLeftButtonUp; } void Canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { _line.X2 = e.GetPosition(this.Canvas).X; _line.Y2 = e.GetPosition(this.Canvas).Y; _line.Loaded += _line_Loaded; Canvas.Children.Add(_line); } void _line_Loaded(object sender, RoutedEventArgs e) { Cls_Barriere.LineAnimation(sender as Line, "RED"); } void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { _line = new Line(); _line.Stroke = new SolidColorBrush(Colors.White); _line.StrokeThickness = 5; _line.StrokeStartLineCap = PenLineCap.Round; _line.StrokeEndLineCap = PenLineCap.Round; _line.StrokeDashCap = PenLineCap.Round; _line.X1 = e.GetPosition(this.Canvas).X; _line.Y1= e.GetPosition(this.Canvas).Y; }