2011-01-15 11 views
0

私はイメージとハンドルを持っています。私は2つのエフェクトを使ってハンドルをドラッグしたい:画像のサイズを変更し、ハンドルを移動して画像の角に保持する。私のコードは次のとおりです。ハンドルを使ってSilverlightでサイズを変更する

public void StartResizing(object sender, MouseEventArgs e) 
    { 
     resizing = true; 

     Point pos = e.GetPosition(null); 
     resizeX = pos.X; 
     resizeY = pos.Y; 
     distH = pos.X - 200; //Canvas.Left of the image 
     distV = pos.Y - 50; //Canvas.Top of the image 
    } 

    public void KeepResizing(object sender, MouseEventArgs e) 
    { 
     if (resizing) 
     { 
      Point p = e.GetPosition(null); 
      double x = p.X - resizeX; 
      double y = p.Y - resizeY; 

      this.handle.SetValue(Canvas.LeftProperty, 280 + x); //280.130 is the original position of the handle 
      this.handle.SetValue(Canvas.TopProperty, 130 + y); 

      double newDistH = p.X - 200; 
      double newDistV = p.Y - 50; 
      pic2.Height = (newDistV/distV) * orgHeight; //orgHeight and Widthinitialised earlier 
      pic2.Width = (newDistH/distH) * orgWidth; 
     } 
    } 

    public void StopResizing(object sender, MouseEventArgs e) 
    { 
     resizing = false; 
    } 

もう一度サイズを変更しようとするまでうまくいきます。それは、画像が通常、一見無作為な方法で収縮するときです。コードの何が間違っていますか?

答えて

4

まず、Silverlightにあなたのための仕事をさせてください。このXAMLを考えてみましょう: -

コードで今すぐ
<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <Image x:Name="image" Source="someUrl" Width="200" Height="200" Margin="0 0 8 8" /> 
     <Rectangle x:Name="handle" VerticalAlignment="Bottom" HorizontalAlignment="Right" Fill="Blue" Width="8" Height="8" MouseLeftButtonDown="handle_MouseLeftButtonDown" /> 
    </Grid> 

あなたは単にGridコントロールがサイズ変更ハンドルを配置した後になります、サイズにイメージを必要とします。画像のサイジングを管理するhandle_MouseLeftButtonDownのコードを次に示します: -

private void handle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     UIElement handle = (UIElement)sender; 

     Point origMouse = e.GetPosition(null); 
     Size origSize = new Size(image.Width, image.Height); 
     handle.CaptureMouse(); 

     MouseEventHandler mouseMove = (s, args) => 
     { 
      Point p = args.GetPosition(null); 
      image.Width = Math.Max(0.0, origSize.Width + p.X - origMouse.X); 
      image.Height = Math.Max(0.0, origSize.Height + p.Y - origMouse.Y); 
     }; 
     handle.MouseMove += mouseMove; 

     MouseButtonEventHandler mouseUp = null; 
     mouseUp = (s, args) => 
     { 
      handle.ReleaseMouseCapture(); 
      handle.MouseMove -= mouseMove; 
      handle.MouseLeftButtonUp -= mouseUp; 
     }; 
     handle.MouseLeftButtonUp += mouseUp; 
    } 
関連する問題