2017-01-17 11 views
1

私のアプリケーションでFluidKitを使用しています。以下のコードは.Net 3.5では正常に動作していますが、.Net 4.5では例外がスローされます。システム無効なキャストNameScopeの例外

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); 
      ... 
      .... 

     } 

例外

System.InvalidCastExcpetionせるNameScope scope = (NameScope)NameScope.GetNameScope(_viewport);ライン:型のオブジェクトをキャストすることができません 'System.XAML.NameScope 'System.Windows.NameScope'

を入力すると

助けてください

+2

てきました完全な型名をキャストしようとしましたか?例:System.XAML.NameScope scope =(System.XAML.NameScope)NameScope.GetNameScope(_viewport); ' –

+1

@ManfredRadlwimmerは良い提案をしました。同様に、あなたの 'を使用して'を確認してください – Nino

+0

親切にこのイメージを参照してくださいhttp://i.imgur.com/5JtPOr3.png –

答えて

2

これは最も迷惑なエラーの1つです。基本的には、同じ名前の2つのクラスがありますが別の名前空間に入れて、あなたは別のものにキャストしようとしています。

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

EDIT:

あなたが常に必要な名前空間のインポートを行いますvarおよびコンパイラを使用することができます。

はちょうどこの行を書き換える問題を取り除くために

var scope = NameScope.GetNameScope(_viewport); 
+0

この画像を参照してくださいhttp://i.imgur.com/5JtPOr3.png –

+0

ありがとう働いた:拍手: –

関連する問題