gpt4 book ai didi

xaml - 如何从Silverlight中的XAML中定义的用户控件正确继承

转载 作者:行者123 更新时间:2023-12-03 14:08:33 25 4
gpt4 key购买 nike

如果我已经编写了一个用户控件(在Silverlight中),并且使用XAML定义了它的外观,那么如何制作它的自定义版本?

即我有MyControl.xaml和MyControl.xaml.cs

如果我想要“ SpecialisedControl”子类,该怎么办?我假设我只是制作一个新的代码文件,然后从MyControl继承。但是,如果我想更改基类的外观,该怎么办?

最佳答案

我写这个想法是因为您是在谈论WPF,而不是Silverlight,但是可能有足够的重叠之处对此有所帮助,因此无论如何我都将其发布。

如果通过“更改基类的外观”表示“提供新模板”,则可能需要的是CustomControl,而不是UserControl。

最好的方法是遵循其他Microsoft控件(例如Button或ListBox)设置的示例:


创建一个直接从Control(或最接近您的控件)派生的类。
如果需要向控件公开任何属性(例如,按钮上的文本),请确保将其正确定义为DependencyProperties。
here所述,创建一个名为Themes / generic.xaml的ResourceDictionary,并为您的类添加一个包含模板的样式(不要为样式指定关键字)。
对于需要从控件中获取值的控件上元素的任何属性,请使用TemplateBindings。
如果您需要将任何事件处理程序附加到模板中的元素,请给它们指定一个唯一的名称。 Microsoft使用在这些名称前面加上“ PART_”的约定,出于一致性考虑,我认为这样做是一件好事,但这并不是严格要求的。
同样,如果您需要附加事件处理程序,请重载OnApplyTemplate()。在这种方法中,您应该分离所有旧的事件处理程序(我们当然不希望任何内存泄漏!),并查找具有您在模板中提供的名称的元素-找到它们时,请根据需要附加事件处理程序。


当然,这比简单地从UserControl派生要多得多,但是如果您希望能够像使用内置控件那样完全重新模板化控件,这就是做到这一点的方法。

另一方面,如果您要做的只是提供一定数量的有限自定义,例如更改背景或将Command与某些用户操作相关联,那么最好的办法是公开DependencyProperties,然后可以可以为您的控件设置样式,也可以为控件本身设置样式。

在您提到要自定义继承控件中的外观的情况下,该过程非常相似:只需为新控件添加具有新模板的默认样式即可;如果您需要添加更多事件处理程序,请绝对确定要调用base.OnApplyTemplate()。

关于xaml - 如何从Silverlight中的XAML中定义的用户控件正确继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/225878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com