C# 命名空间中的系统无效强制转换异常

C# 命名空间中的系统无效强制转换异常,c#,wpf,C#,Wpf,我在应用程序中使用FluidKit。下面的代码在.NET3.5中运行良好,但在.NET4.5中引发异常 private Viewport3D _viewport; protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved) { base.OnVisualChildrenChanged(visualAdded, v

我在应用程序中使用FluidKit。下面的代码在.NET3.5中运行良好,但在.NET4.5中引发异常

private Viewport3D _viewport;

protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
    {
        base.OnVisualChildrenChanged(visualAdded, visualRemoved);

        if (visualAdded != null)
        {
            UIElement elt = visualAdded as UIElement;
            GeometryModel3D model = CreateMeshModel(elt);
            _modelGroup.Children.Add(model);
            UpdateElementIndexes(elt, true);
            if (IsLoaded)
            {
                ReflowItems();
            }
        }

        if (visualRemoved != null)
        {
            UIElement elt = visualRemoved as UIElement;
            int index = (int) elt.GetValue(ItemIndexProperty);
            GeometryModel3D model = _modelGroup.Children[index] as GeometryModel3D;

            UpdateElementIndexes(elt, false);

            _modelGroup.Children.Remove(model);

            // Update SelectedIndex if needed
            if (SelectedIndex >= 0 && SelectedIndex < VisibleChildrenCount)
            {
                ReflowItems();
            }
            else
            {
                SelectedIndex = Math.Max(0, VisibleChildrenCount - 1);
            }
        }
    }
  private void UpdateElementIndexes(UIElement affectedElement, bool attach)
    {

        try
        {

          // Below line is giving exception :(
           NameScope scope = (NameScope)NameScope.GetNameScope(_viewport);
          ...
          ....

        }
私有视口3D\u视口;
VisualChildrenChanged上的受保护覆盖无效(DependencyObject visualAdded,DependencyObject visualRemoved)
{
基于VisualChildrenChanged(visualAdded,visualRemoved);
如果(visualAdded!=null)
{
UIElement elt=可视化添加为UIElement;
GeometryModel3D模型=CreateMeshModel(elt);
_modelGroup.Children.Add(model);
更新元素索引(elt,true);
如果(已加载)
{
回流项();
}
}
如果(visualRemoved!=null)
{
UIElement elt=可视删除为UIElement;
int index=(int)elt.GetValue(ItemIndexProperty);
GeometryModel3D模型=_modelGroup.Children[index]作为GeometryModel3D;
更新元素索引(elt,false);
_modelGroup.Children.Remove(模型);
//如果需要,更新SelectedIndex
如果(SelectedIndex>=0&&SelectedIndex
NameScope scope=(NameScope)NameScope.GetNameScope(_viewport);
导致异常

System.InvalidCastXpetion:无法将类型为“System.XAML.NameScope”的对象强制转换为类型为“System.Windows.NameScope”


请帮助

这是最恼人的错误之一,它说的基本上是,您有两个名称相同但名称空间不同的类,并且您试图将一个类强制转换为另一个类

要解决此问题,只需重写以下行:

// change this:
//NameScope scope = (NameScope)NameScope.GetNameScope(_viewport);
// into this :
System.XAML.NameScope scope = (System.XAML.NameScope)NameScope.GetNameScope(_viewport);
编辑:

您可以始终使用
var
,编译器将执行必要的命名空间导入:


您是否尝试强制转换完整的类型名称?例如:
System.XAML.NameScope scope=(System.XAML.NameScope)NameScope.GetNameScope(_viewport);
@ManfredRadlwimmer给出了很好的建议。另外,请使用
检查您的
,仔细查看此图像
var scope = NameScope.GetNameScope(_viewport);