使用C#和WPF在代码中绘制线条
我正在尝试使用7段显示器创建一个数字时钟显示器。我可以使用如下代码在XAML中绘制线条:使用C#和WPF在代码中绘制线条,c#,wpf,user-interface,lines,C#,Wpf,User Interface,Lines,我正在尝试使用7段显示器创建一个数字时钟显示器。我可以使用如下代码在XAML中绘制线条: <Line Name="line7" Stroke="Black" StrokeThickness="4" X1="10" X2="40" Y1="70" Y2="70" Margin="101,-11,362,250" /> 我的想法是我可以画7条线,然后根据不同数字的需要切换它们的可见性。我相信这可以用很多方法来完成,但是为什么我不能用这样的代码来画线呢?这是你的全部绘图代码吗?如果是这样
<Line Name="line7" Stroke="Black" StrokeThickness="4" X1="10" X2="40" Y1="70" Y2="70" Margin="101,-11,362,250" />
我的想法是我可以画7条线,然后根据不同数字的需要切换它们的可见性。我相信这可以用很多方法来完成,但是为什么我不能用这样的代码来画线呢?这是你的全部绘图代码吗?如果是这样,则需要将
线
对象添加到曲面。例如,如果您使用的是画布:
myCanvas.Children.Add(line);
这将把你的线条添加到画布上。目前,您只是创建了一条线,但没有将其放在任何地方
您可以在上找到有关在WPF中绘图的更多信息。您的意思是什么不起作用,到底发生了什么?没有什么?看起来你已经创建了这条线,但你还没有做任何事情。很像创建一个做了大量工作但从未被调用的方法。抱歉,这并没有像它本来可以做到的那样清楚。我的意思是线没有在屏幕上画出来。谢谢!这就是我错过的!假设我想在图像中添加行。我该怎么做?@Jonas-这可能会有帮助这是一个只使用代码的答案,试着解释一下它的作用
myCanvas.Children.Add(line);
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;
}