2011-05-11 35 views
18

Estoy tratando de crear una pantalla de reloj digital usando pantallas de 7 segmentos. Puedo dibujar líneas en XAML mediante el uso de código como este:Dibujando líneas en código usando C# y WPF

<Line Name="line7" Stroke="Black" StrokeThickness="4" X1="10" X2="40" Y1="70" Y2="70" Margin="101,-11,362,250" /> 

Pero cuando trato de hacerlo en código (de MainWindow()), no funciona:

 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; 

La idea es que puedo dibujar 7 líneas, luego alternar su visibilidad según sea necesario para diferentes números. Estoy seguro de que esto se puede hacer de muchas maneras, pero ¿por qué no puedo dibujar líneas en un código como este?

+0

¿Qué quiere decir que no funciona, qué pasa exactamente? ¿Nada? Parece que has creado la línea, pero no has hecho nada con ella. Es muy parecido a crear un método que hace mucho trabajo, pero nunca se llama. –

+0

Disculpe, esto no fue tan claro como podría haber sido. Quise decir que la línea no se dibujó en la pantalla. – Jesse

Respuesta

22

¿Es ese su código de dibujo completo? Si es así, debe agregar el objeto line a su superficie. Si está utilizando un lienzo por ejemplo:

myCanvas.Children.Add(line); 

Esto agregará su línea a su lienzo. Por el momento, solo estás creando la línea pero no la colocas en ningún lado.

Puede encontrar más información sobre cómo dibujar en WPF en this MSDN page.

+0

Gracias! ¡Eso es lo que me estaba perdiendo! – Jesse

+0

Supongamos que quiero agregar Línea a una imagen. ¿Cómo puedo hacerlo? – Jonas

+0

@Jonas - Esto podría ayudar a 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

esta es una respuesta de solo código, intente explicar Que hace – dotctor