2011-05-11 3 views
18

7 세그먼트 디스플레이를 사용하여 디지털 시계 디스플레이를 만들려고합니다. 나는 다음과 같은 코드를 사용하여 XAML에서 선을 그릴 수 있습니다C# 및 WPF를 사용하여 코드의 선 그리기

<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 개의 선을 그릴 수 있으며, 다른 수에 따라 필요에 따라 가시성을 전환 할 수 있습니다. 이 방법은 여러 가지 방법으로 수행 할 수 있지만이 같은 코드에서는 선을 그릴 수없는 이유는 무엇입니까?

+0

정확히 작동하지 않는다면 무슨 일이 발생합니까? 아무것도? 선을 만든 것처럼 보이지만 그걸로 아무 것도하지 않았습니다. 많은 작업을하지만 결코 호출되지 않는 메서드를 만드는 것과 매우 비슷합니다. –

+0

죄송합니다, 이것은 분명했을 수 있습니다. 나는 그 선이 화면에 그려지지 않았다는 것을 의미했다. – Jesse

답변

22

전체 그림 코드입니까? 그렇다면 표면에 line 오브젝트를 추가해야합니다. 예를 들어 Canvas를 사용하는 경우 :

myCanvas.Children.Add(line); 

이렇게하면 캔버스에 선이 추가됩니다. 현재로서는 라인을 만들었지 만 어디에도 놓지 않습니다.

드로잉에 대한 자세한 내용은 WPF에서 this MSDN page을 참조하십시오.

+0

감사! 그게 내가 놓친거야! – Jesse

+0

이미지에 선을 추가하고 싶다고 가정 해 봅시다. 어떻게 할 수 있습니까? – Jonas

+0

@Jonas - 도움이 될 수도 있습니다. http://stackoverflow.com/questions/5231086/wpf-c-draw-a-line-onto-existing-bitmap-in-image-control – keyboardP

-1
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

이것은 코드 답변입니다. 설명 해보십시오. 그것이하는 일 – dotctor