2016-06-29 7 views
0

wpf 3dオブジェクトにズーム機能を実装しようとしています。私のオブジェクトからトリガするときはうまく動作しています。しかし私はオブジェクトを含む私の全体のスペースのためにこの機能をしたい。どのように私はウィンドウ全体のズーム機能を実装することができますので、私はウィンドウの任意の場所からマウスホイール、私のオブジェクトが拡大され、ズームアウトされます。ここ は、マウスホイールイベントのために私のコードです:ここではWpf3dウィンドウの拡大表示

private void Grid_MouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     TheCamera.Position = new Point3D((TheCamera.Position.X - e.Delta/360D), (TheCamera.Position.Y - e.Delta/360D), (TheCamera.Position.Z - e.Delta/360D)); 
    } 

は私のXAMLコードで、

`

<Viewport3D x:Name="MainViewport"> 
     <Viewport3D.Camera> 
      <PerspectiveCamera x:Name="TheCamera" Position="-40,40,40" LookDirection="40,-40,-40 " 
        UpDirection="0,0,1" /> 
     </Viewport3D.Camera> 
     <ModelVisual3D> 
      <ModelVisual3D.Content> 
       <Model3DGroup> 
        <DirectionalLight Color="White" Direction="-1,-1,-3" /> 
        <GeometryModel3D x:Name="mGeo"> 
         <GeometryModel3D.Geometry> 
          <MeshGeometry3D Positions="0,0,0 10,0,0 10,10,0 0,10,0 0,0,10 
        10,0,10 10,10,10 0,10,10" 
        TriangleIndices="0 1 3 1 2 3 0 4 3 4 7 3 4 6 7 4 5 6 
            0 4 1 1 4 5 1 2 6 6 5 1 2 3 7 7 6 2"/> 
         </GeometryModel3D.Geometry> 
         <GeometryModel3D.Material> 
          <DiffuseMaterial Brush="Red"/> 
         </GeometryModel3D.Material> 
        </GeometryModel3D> 
       </Model3DGroup> 
      </ModelVisual3D.Content> 
     </ModelVisual3D> 
    </Viewport3D> 

</Grid> 

`

+0

ウィンドウのマウスホイールイベントにイベントをフックすることができ代わりにあなたはイベントが発砲しないと言っていますか、ズーム動作が期待どおりではないと言っていますか? –

+0

ズーム動作が期待通りではないと言っています。私のマウスが3dオブジェクトだけを指している間、それは働いています。私はマウスを指差してズームしたい。それは明確ですか? – Aarav

+0

あなたのウィンドウのいくつかの例xamlを投稿できますか? –

答えて

0

あなたのグリッドは、それに設定された無背景ブラシを持っていませんしたがって、ヒットテスト中にホイールイベントが検出されないため、ホイールイベントは発生しません。

<Grid MouseWheel="Grid_MouseWheel" Background="#00000000"> 

上記のような背景で、あなたのグリッドを設定し、あなたはそれが

EDIT機能することを見つける必要があります:あなたの代わりに

<Window Title="MainWindow" Height="350" Width="525" MouseWheel="Grid_MouseWheel"> 
+0

ありがとうございます。あなたの最初の提案を使用しているときはうまく動作します。 – Aarav

+0

助けになるのはうれしいですが、将来はコードが実行されていることを確認するためにブレークポイントを設定すると便利です。あなたがそれをしていれば、メソッドが全く呼び出されていないことが分かりました。 –

+0

はい、この解決策のために私は決してそうは考えていませんでした。私はあなたのポイントを次に思い出すでしょう。再度、感謝します。 – Aarav

関連する問題