2012-11-12 40 views
6

Đây là vấn đề của tôi: Tôi muốn sử dụng một phân lớp của SurfaceInkCanvas trong MyWindow của tôi. Tôi tạo ra một lớp C# như thế này:Làm thế nào để sử dụng một lớp con tùy chỉnh C# trong 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);  
     } 
    } 
} 

Và tôi muốn sử dụng nó trong cửa sổ XAML của tôi. Nó giống như thế này?

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

Tôi có hoàn toàn sai không?

Trả lời

7

Bạn cần phải nhập khẩu một Xml Namespace để sử dụng các lớp học ...

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

Thông báo cách nhập các không gian tên. Một mặc định (không có tiền tố) có thể là bất cứ điều gì bạn muốn, nhưng nó có lẽ tốt nhất để lại điều đó để không gian tên trình bày của Microsoft. Sau đó, có không gian tên "x", là không gian tên xaml cơ bản (tất nhiên bạn có thể thay đổi tiền tố, nhưng bạn nên để nguyên nó).

Vì vậy, để thêm không gian tên của riêng bạn vào đó, có hai cách để làm điều đó (một nếu là địa phương).

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

Trong trường hợp của bạn, bạn có thể muốn thiết lập các tiền tố như "địa phương" và sử dụng CLR Namespace (vì nó là tất cả những gì bạn có thể sử dụng).

nhập: xmlns:local="clr-namespace:MyNamespace;Assembly=???"
Cách sử dụng: <local:SubSurfaceInkCanvas ... />


Ngoài ra, nếu các lớp này là bên trong một thư viện bên ngoài, bạn có thể lập bản đồ CLR-Namespaces của bạn để XML Namespaces ... see this answer cho một explenation trong vấn đề này.

+0

+1 Giải thích tốt –

3

Bạn cần phải thêm không gian tên (xmlns: myControls), hãy thử như thế này:

<Window ... 
     xmlns:myControls="clr-namespace:MyNamespace;assembly=MyNamespace" 
     ...> 
    <myControls:SubSurfaceInkCanvas x:Name="canvas" 
            Background="White" 
            TouchDown="OnTouchDown"/> 
</Window> 
Các vấn đề liên quan