Как манипулировать линией мышью? - PullRequest
0 голосов
/ 09 ноября 2011

Можно ли создать «упругую» линию с помощью C # в wpf, которой можно манипулировать с помощью мыши, пока их начальная и конечная точки остаются стабильными?В частности, я хотел бы, чтобы он был изменяемого размера и его кривая изменяла свое направление после перемещения курсора, который ранее захватывал линию?Это то, что вы часто встречаете в графических интерфейсах настольных приложений.

Подходит ли для этого класс манипуляции Delta?Я хочу что-то похожее на то, что описано в http://msdn.microsoft.com/en-us/library/ee649090.aspx, но с помощью мыши, а не на ощупь.

1 Ответ

0 голосов
/ 10 ноября 2011

Да, это очень возможно.

В реальном приложении я бы, вероятно, использовал некоторые пользовательские элементы управления для больших пальцев, чтобы обрабатывать части позиционирования и захвата мыши, чтобы их можно было многократно использовать.1005 *

Вот XAML

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
  <Canvas Name="myCanvas" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <Line Name="myLine" X1="100" Y1="100" X2="200" Y2="200" Stroke="Black" />
    <Ellipse Name="thumb1" Fill="Blue" Width="10" Height="10" Canvas.Left="95" Canvas.Top="95" Cursor="Hand" MouseLeftButtonDown="OnPoint1Down" MouseLeftButtonUp="OnPoint1Up" MouseMove="OnPoint1Move" />
  </Canvas>
</Window>

А вот код

  public partial class MainWindow : Window {
    public MainWindow() {
      InitializeComponent();
      }

    private void OnPoint1Down( object sender, MouseButtonEventArgs e ) {
      Mouse.Capture( thumb1 );
      }

    private void OnPoint1Up( object sender, MouseButtonEventArgs e ) {
      Mouse.Capture( null );
      }

    private void OnPoint1Move( object sender, MouseEventArgs e ) {

      if ( e.LeftButton == MouseButtonState.Pressed ) {

        var point = e.GetPosition( myCanvas );

        myLine.X1 = point.X;
        myLine.Y1 = point.Y;

        Canvas.SetLeft( thumb1, point.X - thumb1.Width/2 );
        Canvas.SetTop( thumb1, point.Y - thumb1.Height/2 );
        }
      }
    }
...