【问题标题】:Wpf3d Zooming for windowWpf3d窗口缩放
【发布时间】:2016-06-29 11:57:35
【问题描述】:

我正在尝试为我的 wpf 3d 对象实现缩放功能。当我从我的对象触发它时它工作正常。但我想为我的整个空间(包括对象)执行此功能。如何为整个窗口实现这种缩放功能,所以如果我从窗口的任何位置鼠标滚轮,我的对象将被放大和缩小。 这是我的 MouseWheel 事件代码:

    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>

`

【问题讨论】:

  • 您是说事件没有触发还是说缩放行为不是您所期望的?
  • 我是说缩放行为不是我的预期。当我的鼠标仅指向 3d 对象时,它正在工作。我想在不指向鼠标的情况下进行缩放。清楚了吗?
  • 您能发布一些您的窗口的示例 xaml 吗?
  • 将 Viewport3D 放入 ViewBox。
  • 这里我已经上传了我的帖子,所以你可以看到我的 xaml 文件。 @本斯蒂尔

标签: c# wpf wpf-controls wpftoolkit


【解决方案1】:

您的网格上没有设置背景画笔,因此车轮事件不会触发,因为它在命中测试期间未被检测到。

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

将您的网格设置为与上述类似的背景,您应该会发现它可以工作

编辑:或者,您可以将事件挂钩到窗口的 MouseWheel 事件

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

【讨论】:

  • 谢谢。当我使用您的第一个建议时效果很好。
  • 很高兴能提供帮助,以后可以方便地插入断点以确保代码正在运行。如果你这样做了,你会发现该方法根本没有被调用
  • 是的,但是对于这个解决方案,我从来没有这样想过。接下来我会记住你的观点。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多