2014-04-15 6 views
1

나는 ManipulationDelta 메서드를 통해 WPF에서 frameworkelements를 스케일링하기위한 작업 코드를 얻었습니다. 버튼, 도형 또는 텍스트 블록과 같은 모든 종류의 요소에서 작동하지만 텍스트 상자에서는 작동하지 않습니다.WPF의 텍스트 상자에 꼬집음

아무도 내가 고칠 수있는 방법을 알고 있습니까?

편집 : Here'sa 내 코드의 버전을 simpified : 요소가 genericly을 만들어

private void canvas_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) 
    { 
     var element = e.Source as FrameworkElement; 
     var transformation = element.RenderTransform as MatrixTransform; 
     var matrix = transformation == null ? Matrix.Identity : transformation.Matrix; 

      matrix.ScaleAt(e.DeltaManipulation.Scale.X, 
      e.DeltaManipulation.Scale.Y, 
      1, 
      1); 
     } 

     matrix.RotateAt(e.DeltaManipulation.Rotation, 
         e.ManipulationOrigin.X, 
         e.ManipulationOrigin.Y); 

     matrix.Translate(e.DeltaManipulation.Translation.X, 
         e.DeltaManipulation.Translation.Y); 

     element.RenderTransform = new MatrixTransform(matrix); 

     e.Handled = true; 

     } 

하지만,이 XAML와 같은 키우면 :

 <Canvas Name="SomeCanvas" ManipulationDelta="canvas_ManipulationDelta"> 
      <TextBox Canvas.Left="400" Canvas.Top="200" Height="50" Name="s3" IsManipulationEnabled = "true" Background="#57FF3ACB" /> 
     </Canvas> 
+0

저자에게 도움을 요청할 수 있습니다. 또는 귀하의 질문을 수정하여 그것이 어떻게 고장 났는지, 어디에서 깨지는 지 등을 포함 할 수 있습니다. –

+1

나는 내 코드를 질문에 게시했습니다. 그리고 나는 정말로 저자에게 물어볼 것입니다. :) – user3333128

+0

Xaml에서 변형이 어떻게 더 잘 나타 났습니까? –

답변

0

이 텍스트 상자 핸들 때문이다 내부적으로 MouseDown 이벤트. 그들은 결코 부름을받지 않으므로 조작이 불가능합니다.

또는 http://msdn.microsoft.com/es-es/library/ms750580(v=vs.85).aspx

, 당신이 국경에서 텍스트 상자를 포장 수 :

<Canvas Name="SomeCanvas" ManipulationDelta="canvas_ManipulationDelta"> 
    <Border Canvas.Left="400" Canvas.Top="200" Background="Transparent" IsManipulationEnabled="True"> 
     <TextBox Height="50" Name="s3" Background="#57FF3ACB" IsHitTestVisible="False" /> 
    </Border> 
</Canvas> 

는 마우스 이벤트에 텍스트 상자에서 통과하도록하기 위해 False로 IsHitTestVisible 속성을 넣고 여기에 대한 설명입니다 국경.

또한 Border 's Background를 설정하여 히트 테스트가 표시되도록해야합니다.