8

ここに私の問題があります: MyWindow で SurfaceInkCanvas のサブクラスを使用したいと思います。次のような 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"/>

私は完全に間違った方向に進んでいますか?

4

2 に答える 2

8

クラスを使用するには、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 のプレゼンテーション名前空間に任せるのがおそらく最善です。次に、ベースの xaml 名前空間である "x" 名前空間があります (もちろんプレフィックスを変更できますが、そのままにしておく必要があります)。

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

  • CLR 名前空間:xmlns:<prefix>="clr-namespace:<namespace>;Assembly=<assemblyName>"
  • URI名前空間:xmlns:<prefix>="<uri>"

あなたの場合、プレフィックスを「ローカル」として設定し、CLR 名前空間を使用することをお勧めします (使用できるのはそれだけであるため)。

インポート:xmlns:local="clr-namespace:MyNamespace;Assembly=???"
使用法:<local:SubSurfaceInkCanvas ... />


または、これらのクラスが外部ライブラリ内にある場合は、CLR 名前空間を XML 名前空間にマップできます。その説明については、この回答を参照してください。

于 2012-11-12T21:24:05.193 に答える
3

名前空間 (xmlns:myControls) を追加する必要があります。次のようにしてください。

<Window ...
        xmlns:myControls="clr-namespace:MyNamespace;assembly=MyNamespace"
        ...>
    <myControls:SubSurfaceInkCanvas x:Name="canvas"
                                    Background="White"
                                    TouchDown="OnTouchDown"/>
</Window>
于 2012-11-12T21:21:18.167 に答える