【问题标题】:Missing using directive or assembly reference in WPF in C#在 C# 中的 WPF 中缺少 using 指令或程序集引用
【发布时间】:2013-05-09 04:02:43
【问题描述】:

我试图在 C# 中的 WPF 中绘制一个三角形,只是为了学习如何使用这个工具。如果您检查最后一条语句,我将因此无法运行程序。我想我缺少 using 指令或者可能是程序集引用 ...

这些是我正在使用的 using 指令:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Media.Media3D;

这是我的代码:

System.Windows.Media.Media3D.Point3D point0 = new Point3D(-0.5, 0, 0);
System.Windows.Media.Media3D.Point3D point1 = new Point3D(0.5, 0.5, 0.3);
System.Windows.Media.Media3D.Point3D point2 = new Point3D(0, 0.5, 0);


System.Windows.Media.Media3D.MeshGeometry3D triangleMesh = new MeshGeometry3D();

triangleMesh.Positions.Add(point0);
triangleMesh.Positions.Add(point1);
triangleMesh.Positions.Add(point2);

int n0 = 0;
int n1 = 1;
int n2 = 2;

triangleMesh.TriangleIndices.Add(n0);
triangleMesh.TriangleIndices.Add(n1);
triangleMesh.TriangleIndices.Add(n2);

System.Windows.Media.Media3D.Vector3D norm = new Vector3D(0, 0, 1);
triangleMesh.Normals.Add(norm);
triangleMesh.Normals.Add(norm);
triangleMesh.Normals.Add(norm);

System.Windows.Media.Media3D.Material frontMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Blue));

System.Windows.Media.Media3D.GeometryModel3D triangleModel = new GeometryModel3D(triangleMesh, frontMaterial);

triangleModel.Transform = new Transform3DGroup();

System.Windows.Media.Media3D.ModelVisual3D visualModel = new ModelVisual3D();
visualModel.Content = triangleModel;

this.mainViewport.Children.Add(visualModel); // here I have an error !

【问题讨论】:

  • 你在哪里声明mainViewport?编辑:我认为问题不在于您缺少using 声明。我认为问题在于 mainViewport 尚未在可访问范围内声明。
  • 我没有声明。实际上,我有一些 2 个不同的教程说,只要实现这个代码,程序就可以工作......如果我需要这样做,我该如何声明 mainViewport?
  • 您是否在 XAML 中为关联控件声明/命名了它?

标签: c# graphics 3d


【解决方案1】:

在你的 xaml 文件中像这样覆盖你的网格,你的黑色三角形就会出现。我测试过了。

<Grid>
        <Viewport3D Name="mainViewport" ClipToBounds="True">
            <Viewport3D.Camera>
                <PerspectiveCamera 
  FarPlaneDistance="100"
  LookDirection="-11,-10,-9"
  UpDirection="0,1,0"
  NearPlaneDistance="1" 
  Position="11,10,9" 
  FieldOfView="70" />
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <DirectionalLight 
    Color="White" 
    Direction="-2,-3,-1" />
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
</Grid>

【讨论】:

  • 我在我的 xaml 文件中覆盖了我的网格,但很奇怪,它不起作用。这是错误消息:“'WpfApplication1.mainWindow' 不包含'mainViewport' 的定义,并且找不到'mainViewport' 接受'WpfApplication1.mainWindow' 类型的第一个参数的扩展方法”。这很奇怪,因为您在第二行“mainViewport”中声明...
  • 我需要在运行应用程序之前绘制一个三角形还是应该让三角形自行弹出?
  • 理想情况下,您会以您尝试过的方式,以编程方式和在 xaml 之外进行操作
  • 好的,我明白了。但即使我用你写的内容覆盖我的网格,我仍然有同样的错误。我的代码无法识别:this.mainViewport.Children.Add(visualModel);问题来自“mainViewport”,尽管它是在 Grid 中定义的
  • @ahmad .... 确定您的电子邮件地址是什么(给我一个垃圾邮件),我会向您发送所有内容的压缩包。 pastie.org/7900661
【解决方案2】:

这很奇怪,它对我不起作用!但是如果我用下面的代码替换最后一条语句,它没有显示错误,因为我声明了 mainViewport,但是现在当我运行程序时,三角形没有出现! (我的 xaml 文件看起来就像 Drew Pierce 所写的一样)。

知道为什么三角形没有出现吗?

        System.Windows.Media.Media3D.Viewport3DVisual mainViewport = new Viewport3DVisual();

        mainViewport.Children.Add(visualModel);

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多