c# - 如何在 XAML 中使用 C# 自定义子类?

标签 c# wpf xaml inheritance

这是我的问题:我想在我的 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"/>

我完全走错了吗?

最佳答案

您需要导入 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>

注意 namespace 是如何导入的。默认的(无前缀)可以是任何你想要的,但最好将它留给微软的表示命名空间。然后是“x”命名空间,这是基本的 xaml 命名空间(当然你可以更改前缀,但你应该保持原样)。

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

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

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

导入:xmlns:local="clr-namespace:MyNamespace;Assembly=???"
用法:<local:SubSurfaceInkCanvas ... />


或者,如果这些类在外部库中,您可以将 CLR 命名空间映射到 XML 命名空间...参见 this answer对此进行解释。

关于c# - 如何在 XAML 中使用 C# 自定义子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351652/

相关文章:

c# - 在 wpf 中绑定(bind)模型的通用属性

c# - Linq 加入 Group By

c# - MVVM - 模型与 ViewModel - 将我的代码放在哪里?

c# - 数据网格行详细信息中的用户控件

c# - 如何在 Windows Phone 8.1/Windows 10 上创建自定义 VirtualizingPanel?

wpf - "inherit"wpf 中的主题风格

xaml - 在 Windows Store Apps/Metro XAML 中将 WebView 设置为自动高度

c# - react X : Catching exceptions on Observable<bool> as lambda expression

c# - 有关更新行数据不起作用的功能

c# - WPF DataGrid (MVVM) 的 ScrollIntoView