2012-03-14 40 views
7

Tôi muốn vẽ một đường trên Lưới WPF.Vẽ đường kẻ và di chuyển nó theo chương trình

private void InitializeTestline() 
{ 
    testline = new Line(); 
    grid.Children.Add(testline); 
    testline.X1 = 0; 
    testline.X2 = 1; 
    testline.Y1 = 0; 
    testline.Y2 = 1; 
    testline.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; 
    testline.VerticalAlignment = System.Windows.VerticalAlignment.Top; 
    testline.Stroke = Brushes.Red; 
    testline.Stretch = Stretch.Fill; 
    testline.StrokeThickness = 2; 
    testline.Visibility = System.Windows.Visibility.Visible; 
} 

Nó được vẽ mà không gặp sự cố. Nhưng bây giờ tôi muốn thêm bốn nút vào lưới (lên, xuống, trái, phải). Vì vậy, khi tôi bấm một trong các nút dòng nên di chuyển theo hướng tôi chọn.

private void MoveUp_Click(object sender, RoutedEventArgs e) 
{ 
    this.testline.Y1 += move; 
    this.testline.Y2 += move; 
} 

Đây là chức năng tôi muốn sử dụng cho việc này, nhưng nó không hoạt động. Vì vậy, làm thế nào nó có thể di chuyển dòng này?

Cuối cùng tôi có một gui giống như một thiết bị đầu cuối cũ3270 và các gui này có dấu mũ. các đường thẳng phải giống như một hình chữ thập (và giúp xem dấu chân thực sự ở đâu)

+0

Xin lỗi, tôi đã nhầm tưởng rằng bạn đang nói về WPF DataGrid – Flot2011

+2

Hãy thử để nhận xét //testline.Stretch = Stretch.Fill; – Klaus78

+0

Cảm ơn, nó sẽ hoạt động tốt ngay bây giờ! Bạn có biết tại sao nó không hoạt động với Stretch? – Pippl

Trả lời

3

Thứ nhất, tôi sẽ không thao tác tọa độ vì chúng chủ yếu để xác định hình dạng của đường kẻ. Thứ hai, tôi sẽ không sử dụng Canvas, thay vào đó là Render Transformation, vì nó có khả năng chạy trên GPU thay vì CPU làm cho hoạt hình mượt mà hơn.

Vì vậy, tôi sẽ làm một cái gì đó như thế này:

XAML:

<Grid x:Name="LayoutRoot"> 

    <Line x:Name="crosshair" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Stroke="Red" 
      X1="0" 
      X2="0" 
      Y1="10" 
      Y2="0" /> 

    <Button Width="50" 
      Height="50" 
      HorizontalAlignment="Right" 
      Click="MoveRight" 
      Content="&gt;" /> 
</Grid> 

Mã Đằng sau:

public partial class MainWindow : Window 
    { 
     private int moveRightDist = 0; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void MoveRight(object sender, RoutedEventArgs e) 
     { 
      this.moveRightDist++; 
      crosshair.RenderTransform = new TranslateTransform(this.moveRightDist, 0); 
     } 
    } 

<Grid x:Name="LayoutRoot"> 

    <Line x:Name="crosshair" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Stroke="Red" 
      X1="0" 
      X2="0" 
      Y1="10" 
      Y2="0" /> 

    <Button Width="50" 
      Height="50" 
      HorizontalAlignment="Right" 
      Click="MoveRight" 
      Content="&gt;" /> 
</Grid> 

quan trọng! Nếu bạn xác định ma trận chuyển đổi Affine trong XAML và tạo hiệu ứng động, tại một số điểm WPF sẽ thay thế thể hiện của ma trận đó và nếu bạn đang tham chiếu ma trận đó trong mã của bạn, bạn có thể không thao tác được đối tượng.

Lưu ý: Tôi muốn tạo tất cả các phần tử giao diện người dùng trong XAML (Blend là một công cụ tuyệt vời cho điều đó) và sau đó sẽ sử dụng tham chiếu đến chúng từ mã phía sau.

-1

tôi đang làm điều này cơ bản giống nhau chỉ trên một mê cung, và đây là những gì tôi sẽ làm gì

private void Move_Up Click(object sender, RoutedEventArgs e) 
{ 
    Point testlinelocation; 
    testlinelocation = testline.Y1; 
    testlinelocation.Offset(someX, someY); 
    testlinelocation = testline.Y1; 
} 

này nên làm việc, nó làm việc đối với tôi, điều may mắn nhất Đây là trong winforms

Các vấn đề liên quan