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 的演示命名空间。然后是“x”命名空间,它是基本的 xaml 命名空间(当然您可以更改前缀,但您应该保持原样)。

因此,为了向其中添加您自己的命名空间,有两种方法(如果它是本地的,则为一种)。

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

在您的情况下,您可能希望将前缀设置为“本地”并使用 CLR 命名空间(因为它是您可以使用的全部)。

进口:xmlns:local="clr-namespace:MyNamespace;Assembly=???"
用途:<local:SubSurfaceInkCanvas ... />


或者,如果这些类位于外部库中,您可以将 CLR-Namespaces 映射到 XML-Namespaces ...请参阅此答案以获取相关说明。

于 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 回答