【问题标题】:How to use a C# custom subclass in XAML?如何在 XAML 中使用 C# 自定义子类?
【发布时间】:2018-01-09 23:23:01
【问题描述】:

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

我是不是完全走错路了?

【问题讨论】:

    标签: c# wpf xaml inheritance


    【解决方案1】:

    您需要导入一个 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:&lt;prefix&gt;="clr-namespace:&lt;namespace&gt;;Assembly=&lt;assemblyName&gt;"
    • URI 命名空间:xmlns:&lt;prefix&gt;="&lt;uri&gt;"

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

    导入:xmlns:local="clr-namespace:MyNamespace;Assembly=???"
    用法:&lt;local:SubSurfaceInkCanvas ... /&gt;


    或者,如果这些类在外部库中,您可以将您的 CLR 命名空间映射到 XML 命名空间...请参阅 this answer 以获取相关说明。

    【讨论】:

      【解决方案2】:

      你需要添加命名空间(xmlns:myControls),试试这样:

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

      【讨论】:

        猜你喜欢
        • 2010-11-24
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        相关资源
        最近更新 更多