c# – UWP中的模板化控制与自定义控制.网上找不到明确的答案
在我的UWP应用程序中,我的控制选项是用户控制和模板控制.我对用户控件的理解在这一点上很清楚.
有人告诉我,自定义控件的样式/模板只在内存中实例化一次,而这只发生在第一次使用控件时.这就是我想要的,因为我知道我正在创建的控件将在ListView中使用. 然而,在本书XAML Unleashed中,作者通过从用户控件开始创建自定义控件,然后简单地更改它的基类.问题是他创建的控件调用InitializeComponent().我听说这种类使用更多内存,因为它为ListView中的每个项重新实例化. 另外,我从未想过Custom Controls使用了InitializeComponent()方法.我以为只是调用this.DefaultStyleKey = typeof(MyClass);在构造函数中.是什么赋予了?我很困惑什么是…… 最后,为什么模板化控件的样式/模板放在全局Generic.xaml文件中,而不是它自己的单独文件(即xaml文件和代码隐藏文件对)?如果控件应该是自定义的和“可移植的”,那么它不应该与其他代码完全分开吗?我没有发现任何一篇文章在任何级别上都详细解释了这些内容. 解决方法
这是大多数人都错了,所以我会试着为你澄清一些事情.
记忆 整个记忆的东西,它都在视觉树中.当您实例化任何控件时,无论是模板控件还是UserControl,您都会在每个实例中使用内存,因为在这两种情况下,您都要在模板中创建可视组件的完整副本. 模板化控件将从ControlTemplate创建副本,而UserControl在调用InitializeComponent()时解析XAML文件. 如果您创建100个模板化控件或100个用户控件(如果它们的内容相同),则内存使用情况将相同. 用法 模板化控件最适合您创建单个组件的情况,例如Button,Slider,MyStarRatingInput等,并且您为控件的用户提供了使用自己的模板交换模板的能力.比UserControls更需要花费很多精力,因为逻辑必须与模板无关,并且模板必须对视觉状态变化做出正确反应. UserControl最适合布局或视图,例如表单,弹出窗口,屏幕,页面等.您不会让某人自由篡改您的视图内容.如果某些视图可以以较小的方式重用,您可以公开一些公共/依赖属性,但通常它们是一成不变的. Generic.xaml 老实说,我没有答案. Microsoft应该允许多个资源字典来实现控件模板的更清晰分区. Generic.xaml是一个保留文件名,引用项目将查找作为控件基本样式的根源.您可以从Generic.xaml引用其他XAML文件,但这很烦人,它会使资源字典的根目录膨胀.现在,你仍然坚持使用这种方法. 建议 如果您正在共享控件库,则可能希望尽可能使用模板化控件.如果您正在为当前项目构建控件,视图,页面等,并且它们不是为了重用,那么请使用UserControls. 如果您计划拥有模板并强制所有用户接受您的设计,您仍然可以在控件库中创建UserControl. 我还建议您计划在单个视图中实例化一百次的项目的模板化控件,如ListView.如果将模板预先加载到内存中而不是在每个实例上解析XAML文件,您将看到明显的速度提升. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |