| 
 | 
 
| 
 
 在MSDN的WPF部分的一些示例里,通常一个示例有两种实现方法:(1)用纯粹的XAML实现;(2)用C#语言实现。我在做实验时,如果是用纯粹的XAML来实现,完全正常。但是试图用C#实现时,则出问题:要是XAML部分置为空(企图用纯粹C#实现),则编译出错,系统提示“缺少根元素,XAML文件无效”;要是XAML部分不留空(例如就使用系统默认生成的XAML代码),则编译不出错,但运行时只有XAML部分起作用,C#代码有等于无。结果,一个示例我只能做到用纯粹XAML实现,而无法采用C#实现的方法。不知这究竟怎么回事。 以下是我在做“创建三维场景”实验时所企图使用的C#代码。如何才能让这些C#代码起作用,从而能通过C#代码实现功能呢?恳请各位大牛指教:  
using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 
using System.Windows.Media.Media3D; 
 
namespace SDKSample 
{ 
    public partial class Basic3DShapeExample : Page 
    { 
        public Basic3DShapeExample() 
        { 
 
            // Declare scene objects. 
            Viewport3D myViewport3D = new Viewport3D(); 
            Model3DGroup myModel3DGroup = new Model3DGroup(); 
            GeometryModel3D myGeometryModel = new GeometryModel3D();            ModelVisual3D myModelVisual3D = new ModelVisual3D(); 
            // Defines the camera used to view the 3D object. In order to view the 3D object, 
            // the camera must be positioned and pointed such that the object is within view  
            // of the camera. 
            PerspectiveCamera myPCamera = new PerspectiveCamera(); 
 
            // Specify where in the 3D scene the camera is. 
            myPCamera.Position = new Point3D(0, 0, 2); 
 
            // Specify the direction that the camera is pointing. 
            myPCamera.LookDirection = new Vector3D(0, 0, -1); 
 
            // Define camera's horizontal field of view in degrees. 
            myPCamera.FieldOfView = 60; 
 
            // Asign the camera to the viewport 
            myViewport3D.Camera = myPCamera; 
            // Define the lights cast in the scene. Without light, the 3D object cannot  
            // be seen. Also, the direction of the lights affect shadowing. Note: to  
            // illuminate an object from additional directions, create additional lights. 
            DirectionalLight myDirectionalLight = new DirectionalLight(); 
            myDirectionalLight.Color = Colors.White; 
            myDirectionalLight.Direction = new Vector3D(-0.61, -0.5, -0.61); 
 
            myModel3DGroup.Children.Add(myDirectionalLight); 
 
            // The geometry specifes the shape of the 3D plane. In this sample, a flat sheet  
            // is created. 
            MeshGeometry3D myMeshGeometry3D = new MeshGeometry3D(); 
 
            // Create a collection of normal vectors for the MeshGeometry3D. 
            Vector3DCollection myNormalCollection = new Vector3DCollection(); 
            myNormalCollection.Add(new Vector3D(0,0,1)); 
            myNormalCollection.Add(new Vector3D(0,0,1)); 
            myNormalCollection.Add(new Vector3D(0,0,1)); 
            myNormalCollection.Add(new Vector3D(0,0,1)); 
            myNormalCollection.Add(new Vector3D(0,0,1)); 
            myNormalCollection.Add(new Vector3D(0,0,1)); 
            myMeshGeometry3D.Normals = myNormalCollection; 
 
            // Create a collection of vertex positions for the MeshGeometry3D.  
            Point3DCollection myPositionCollection = new Point3DCollection(); 
            myPositionCollection.Add(new Point3D(-0.5, -0.5, 0.5)); 
            myPositionCollection.Add(new Point3D(0.5, -0.5, 0.5)); 
            myPositionCollection.Add(new Point3D(0.5, 0.5, 0.5)); 
            myPositionCollection.Add(new Point3D(0.5, 0.5, 0.5)); 
            myPositionCollection.Add(new Point3D(-0.5, 0.5, 0.5)); 
            myPositionCollection.Add(new Point3D(-0.5, -0.5, 0.5)); 
            myMeshGeometry3D.Positions = myPositionCollection; 
 
            // Create a collection of texture coordinates for the MeshGeometry3D. 
            PointCollection myTextureCoordinatesCollection = new PointCollection(); 
            myTextureCoordinatesCollection.Add(new Point(0, 0)); 
            myTextureCoordinatesCollection.Add(new Point(1, 0)); 
            myTextureCoordinatesCollection.Add(new Point(1, 1)); 
            myTextureCoordinatesCollection.Add(new Point(1, 1)); 
            myTextureCoordinatesCollection.Add(new Point(0, 1)); 
            myTextureCoordinatesCollection.Add(new Point(0, 0)); 
            myMeshGeometry3D.TextureCoordinates = myTextureCoordinatesCollection; 
 
            // Create a collection of triangle indices for the MeshGeometry3D. 
            Int32Collection myTriangleIndicesCollection = new Int32Collection(); 
            myTriangleIndicesCollection.Add(0); 
            myTriangleIndicesCollection.Add(1); 
            myTriangleIndicesCollection.Add(2); 
            myTriangleIndicesCollection.Add(3); 
            myTriangleIndicesCollection.Add(4); 
            myTriangleIndicesCollection.Add(5); 
            myMeshGeometry3D.TriangleIndices = myTriangleIndicesCollection; 
 
            // Apply the mesh to the geometry model. 
            myGeometryModel.Geometry = myMeshGeometry3D; 
 
            // The material specifies the material applied to the 3D object. In this sample a   
            // linear gradient covers the surface of the 3D object. 
 
            // Create a horizontal linear gradient with four stops.    
            LinearGradientBrush myHorizontalGradient = new LinearGradientBrush(); 
            myHorizontalGradient.StartPoint = new Point(0, 0.5); 
            myHorizontalGradient.EndPoint = new Point(1, 0.5); 
            myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.Yellow, 0.0)); 
            myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.Red, 0.25)); 
            myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.Blue, 0.75)); 
            myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.LimeGreen, 1.0)); 
 
            // Define material and apply to the mesh geometries. 
            DiffuseMaterial myMaterial = new DiffuseMaterial(myHorizontalGradient); 
            myGeometryModel.Material = myMaterial; 
 
            // Apply a transform to the object. In this sample, a rotation transform is applied,   
            // rendering the 3D object rotated. 
            RotateTransform3D myRotateTransform3D = new RotateTransform3D(); 
            AxisAngleRotation3D myAxisAngleRotation3d = new AxisAngleRotation3D(); 
            myAxisAngleRotation3d.Axis = new Vector3D(0,3,0); 
            myAxisAngleRotation3d.Angle = 40; 
            myRotateTransform3D.Rotation = myAxisAngleRotation3d; 
            myGeometryModel.Transform = myRotateTransform3D; 
 
            // Add the geometry model to the model group. 
            myModel3DGroup.Children.Add(myGeometryModel); 
 
            // Add the group of models to the ModelVisual3d. 
            myModelVisual3D.Content = myModel3DGroup; 
 
            //  
            myViewport3D.Children.Add(myModelVisual3D); 
 
            // Apply the viewport to the page so it will be rendered. 
            this.Content = myViewport3D; 
        } 
    } 
} |   
 
 
 
 |