2012-11-12 4 views
6

ここに私の問題があります:MyWindowにSurfaceInkCanvasのサブクラスを使用したいと思います。 私はこのようなC#クラスを作成:XAMLでC#カスタムサブクラスを使用するには?

namespace MyNamespace 
{ 
    public class SubSurfaceInkCanvas : SurfaceInkCanvas 
    { 
     private MyWindow container; 

     public SubSurfaceInkCanvas() 
      : base() 
     { 
     } 

     public SubSurfaceInkCanvas(DrawingWindow d) : base() 
     { 
      container = d; 
     } 

     protected override void OnTouchDown(TouchEventArgs e) 
     { 
      base.OnTouchDown(e);  
     } 
    } 
} 

をそして私は私のXAMLのウィンドウでそれを使用したいと思います。それはこれのようなものですか?

<MyNamespace:SubSurfaceInkCanvas 
    x:Name="canvas" 
    Background="White" 
    TouchDown="OnTouchDown"/> 

私はまったく間違った方法ですか?

答えて

7

あなたはクラスを使用するためのXML名前空間をインポートする必要があります...

<Window x:Class="Namespace.SomeWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> ... </Window> 

お知らせ名前空間のインポート方法デフォルトのもの(接頭辞なし)は任意のものにすることができますが、それをMicrosoftのプレゼンテーション名前空間に任せるのが最善でしょう。次に、 "x"名前空間があります。これは、ベースxaml名前空間です(もちろん、接頭辞を変更することもできますが、そのままにしておく必要があります)。

したがって、独自の名前空間を追加するには、2つの方法(1つはローカルの場合)があります。

  • CLR-名前空間:xmlns:<prefix>="clr-namespace:<namespace>;Assembly=<assemblyName>"
  • URI-名前空間:あなたのケースではxmlns:<prefix>="<uri>"

は、おそらく "ローカル" などの接頭辞を設定し、それがあるので、(CLR名前空間を使用したいと思いますすべて使用できます)。

インポート:xmlns:local="clr-namespace:MyNamespace;Assembly=???"
使用方法:これらのクラスは、外部ライブラリの内部にある場合<local:SubSurfaceInkCanvas ... />


あるいは、あなたはexplenationためthis answerを参照してください...あなたのCLR-名前空間XML-名前空間をマッピングすることができますその上に。

+0

+1良い説明 –

3

あなたは、名前空間(のxmlns:myControls)を追加する必要があり、このようにしてみてください、:

<Window ... 
     xmlns:myControls="clr-namespace:MyNamespace;assembly=MyNamespace" 
     ...> 
    <myControls:SubSurfaceInkCanvas x:Name="canvas" 
            Background="White" 
            TouchDown="OnTouchDown"/> 
</Window> 
関連する問題