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

27

我正在尝试使用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条线,然后根据需要为不同的数字切换它们的可见性。我相信这可以用多种方式实现,但是为什么我不能像这样在代码中画出线?


你说的“不起作用”是指什么?什么都没有发生吗?看起来你已经创建了这行代码,但是还没有对它进行任何操作。就像创建了一个很多工作的方法,但从未调用一样。 - The Muffin Man
1
抱歉,我的表述可能不够清晰。我的意思是该行没有在屏幕上绘制出来。 - Jesse
2个回答

32

这是你完整的绘图代码吗?如果是,你需要将line对象添加到你的surface中。例如,如果你正在使用Canvas:

myCanvas.Children.Add(line);
这将在你的画布上添加你的线。目前,你只是创建了这条线,却没有将它放在任何地方。
你可以在此MSDN页面中找到更多关于WPF绘图的信息。

谢谢!这就是我所缺少的! - Jesse
假设我想给一张图像添加线条,我应该怎么做? - Jonas
@Jonas - 这有可能会有所帮助:https://dev59.com/DFXTa4cB1Zd3GeqPxgFS - keyboardP

0
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;

    }

4
这是一个仅包含代码的回答,请尝试解释它的功能。 这段代码只显示了实现的操作,缺乏注释和上下文。因此,需要更多信息才能准确地解释它的功能。 - Hamid Pourjam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接