<Viewport3D x:Name="viewPort3D" RenderOptions.EdgeMode="Aliased" ClipToBounds="False">
<Viewport3D.Camera>
<PerspectiveCamera Position="0,1,0" LookDirection="0,0,-1" UpDirection="0,1,0" FieldOfView="40" />
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="White"/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D >
<ModelVisual3D.Content>
<Model3DGroup x:Name="model3DGroup">
<Model3DGroup.Children>
<GeometryModel3D x:Name="right" Geometry="{StaticResource Geometry}" >
<GeometryModel3D.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0,0,0" Angle="0"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
<TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="-50" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="Resources\Images\6.jpg">
</ImageBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup.Children>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>我想在那个图上鼠标加事件,但是好像没有可加事件的属性支持,但是我想不至于不能添加事件吧,要不然能看不能摸有什么意思呢。不知道微软是怎么处理的?(我想微软的人不至于搞出来的东西不支持事件吧)
Wpf鼠标事件是路由事件,可以是冒泡和隧道方式的,Viewport3D的鼠标事件同样能捕捉它内部子元素的鼠标事件,前提是内部子元素也有鼠标事件;事实上,你点击的区域虽然在Viewport3D的范围内,但是触发事件的元素可能是Viewport3D的子元素,但是Viewport3D同样能捕捉到事件
<TextBlock MouseLeftButtonDown="M_2"/>
</Grid>你点击TextBlock,会同时触发M_1和M_2的事件,但是并不意味着,你同时点击了TextBlock和Grid,Grid的事件是TextBlock通过冒泡方式传递给Grid如果TextBlock不支持MouseLeftButtonDown,则Grid 也不能触发MouseLeftButtonDown;同样的道理,假如Viewport3D内部的子元素如果支持鼠标路由事件,那么Viewport3D也可以捕捉到,假如Viewport3D内部的子元素不支持鼠标事件,不但子元素捕捉不到,Viewport3D也捕捉不到
ChessPiece GetHitTestResult(Point location)
{
HitTestResult result = VisualTreeHelper.HitTest(_3DChess, location);
if (result != null && result.VisualHit is ChessPiece)
{
ChessPiece visual = (ChessPiece)result.VisualHit;
return visual;
}
return null;
}