一个正常用户控件看起来像这样在XAML:

<UserControl x:Class="mynamespace.foo" ...namespaces...>
<!-- content -->
</UserControl>

我想能够定义自己的顶层对象,沿着线:

<MyControl x:Class="mynamespace.mycontrol" ...namespaces...>
<!-- content -->
</UserControl>

其中MyControl从一个用户控件本身。

导出

当然,编译器抱怨显示“myControl”中没有被发现。有没有解决的办法?

有帮助吗?

解决方案

根标签是基类。这就是为什么默认窗口1根是窗口。使用菜单选项添加> UserContol ......其实对于UserContol创建一个子类。

如果你有一些共同的元件和要控制的基类可以使用基类作为根标签。你不能从具有XAML定义可视树中的任何类派生类,但你的基类,可以从UserConrtol派生。

首先定义基类:

public class MyControlBase : UserControl
{
    // ...
}

然后创建您的具体子类:

(可以与自动创建的UserControl1就从那里改变)

public partial class MyControl1 : MyControlBase
{
    public MyControl1()
    {
        InitializeComponent();
    }
}

然后改变XAML中侧看起来像这样:

<MyNamespace:MyControlBase
    x:Class="MyNamespace.MyControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:MyNamespace="clr-namespace:MyNamespace">

这是让其他用户控件是从建于那些衍生自定义控件的好方法。它通常建议只使用基本的UserConrtols如果你能做出一个自定义的控制只有当你不得不这样做。

好运,

其他提示

定义命名空间在XAML然后使用控制名称作为标记:

<Window ...
    xmlns:my="..." />

    <my:mycontrol ... />

</Window>

没有。该XAML是述说一个MyControl视觉是,就像代码隐藏是定义什么是MyControl行为上的。定义MyControl的视觉效果在MyControl方面就没有真正意义:它相当于在代码隐藏,从MyControl,你显然不会做得出MyControl

此外,WPF不会让你从另一个例如导出一个用户控件类如果BobsControl是一个用户控件,那么你也不能写<local:BobsControl x:Class="MyNamespace.MyControl... />。相信这是因为用户控件具有视觉外观(内容)烘焙成其XAML和派生类的内容将必须替换的基类的内容,所以视觉继承通常是没有用的。

不过,您的 的可以做到这一点,如果你从推导顶级元素是自定义的控制。定制控件是无外观(在XAML没有定义)。所以,你的可以的创建自己的顶级元素作为一个自定义的控制,然后得出从“用户”控制。 (如果你沿着这条路走下去,你可能会想自ContentControl派生自定义控制或申请ContentPropertyAttribute,让您的顶级元素很可能包含其他XAML。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top