2012-11-12 10 views
6

Oto mój problem: Chciałbym użyć podklasy SurfaceInkCanvas w moim MyWindow. stworzyłem klasę C# tak:Jak używać niestandardowej podklasy C# w XAML?

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

I chciałbym użyć go w moim oknie XAML. Czy to coś takiego?

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

Czy jestem całkowicie w niewłaściwy sposób?

Odpowiedz

7

trzeba importować nazw XML w celu korzystania z klas ...

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

Zawiadomienie sposób importowania przestrzeni nazw. Domyślna (bez prefiksu) może być dowolna, ale prawdopodobnie najlepiej pozostawić to w przestrzeni nazw prezentacji Microsoft. Istnieje także przestrzeń nazw "x", która jest podstawową przestrzenią nazw xaml (oczywiście możesz zmienić prefiks, ale powinieneś go zostawić tak, jak jest).

Tak więc, aby dodać do niego własną przestrzeń nazw, istnieją dwa sposoby jej wykonania (jeden, jeśli jest lokalny).

  • CLR Przestrzenie nazw: xmlns:<prefix>="clr-namespace:<namespace>;Assembly=<assemblyName>"
  • URI przestrzeni nazw: xmlns:<prefix>="<uri>"

W twoim przypadku, że prawdopodobnie chcesz ustawić prefiks jako "lokalne" i używać przestrzeni nazw CLR (ponieważ jest to wszystko, czego możesz użyć).

importu: xmlns:local="clr-namespace:MyNamespace;Assembly=???"
Zastosowanie: <local:SubSurfaceInkCanvas ... />


Alternatywnie, jeśli te zajęcia są wewnątrz zewnętrznej biblioteki, można mapować CLR przestrzeni nazw do przestrzeni nazw XML ... zobacz this answer dla explenation Na tym.

+0

+1 Dobre objaśnienie –

3

Trzeba dodać przestrzeni nazw (xmlns: myControls), spróbuj tak:

<Window ... 
     xmlns:myControls="clr-namespace:MyNamespace;assembly=MyNamespace" 
     ...> 
    <myControls:SubSurfaceInkCanvas x:Name="canvas" 
            Background="White" 
            TouchDown="OnTouchDown"/> 
</Window> 
Powiązane problemy