Рисование линий в коде с использованием C# и WPF
Я пытаюсь создать цифровой дисплей часов, используя 7 сегментных дисплеев. Я могу рисовать линии в XAML с помощью кода, подобного этому:
<Line Name="line7" Stroke="Black" StrokeThickness="4" X1="10" X2="40" Y1="70" Y2="70" Margin="101,-11,362,250" />
Но когда я пытаюсь сделать это в коде (из 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 линий, а затем переключить их видимость, как требуется для разных чисел. Я уверен, что это можно сделать многими способами, но почему я не могу рисовать строки в коде, как это?
2 ответов:
Это весь ваш чертежный код? Если это так, вам нужно добавить объект
lineна вашу поверхность. Если вы используете холст, например:myCanvas.Children.Add(line);Это добавит вашу линию к вашему холсту. В данный момент Вы просто создаете линию, но не помещаете ее куда-либо.
Вы можете найти дополнительную информацию о рисовании в WPF наэтой странице MSDN .
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; }
Comments