我一直在阅读有关用户和自定义控件的区别一些解释,比如这个: http://www.wpftutorial.net/CustomVsUserControl.html
我想创建,例如,一个DataGrid的一个简单组成2个组合框这是负责从DataGrid的事项发生变化的值。 我想创建此特定的控制,因为我要使用它很多次。 我想后面,然后实现在XAML调用我只有指定的ItemsSource的逻辑。
在这个例子中我应该创建一个用户或自定义控制? 因为我将有特性和逻辑,我应该有此控件的视图模型?
编辑:你知不知道这些两个选项之间清晰的概念分离一些文章?
选择不仅用户控制和定制控制之间,但用户控制,自定义控制,自定义控制模板,定制数据模板,报头模板(用于收集为基础的控制)中,附加属性。 请参阅控件创作概述
我去了以下考虑顺序
附加属性 :如果功能可以实现,我用的附加属性。 例如,数值文本框。
控制模板 :当需求可以通过自定义的控件模板应验,我用这个。 例如,圆形的进度条。
自定义控制 :如果对照模板不能做到这一点,我使用自定义的控制。 提供我需要自定义/已延长本次控制。 实施例提供排序,过滤基于标题行中的GridView(GridView的是存在于地铁应用程序,只是用于说明的例子)
用户控制 :最不优选的一个。 只有当需要组成,我无法使用自定义的控制做到这一点。 就像你的榜样,2 ComboBox和1个DataGrid中。 用户控件不提供无缝无外观的功能,可通过自定义或控制模板被利用。
你已经有一个解释的差异,但也明白,自定义控件和一些伟大的答案UserControls
有不同的用途:
一个UserControl
通常encapusulates某种复合行为。 如果您有需要在很多地方编辑联系人详细信息的应用程序,例如,您可以创建具有与一个提交按钮具有相关代码排版的所有数据标签和文本字段的自定义控制和再利用这种控制在整个应用程序。
自定义控制是从所述的一个得到的控制WPF
控制类(EG Control
, ContentControl
等等),并具有在代码被创建。 这些控制通常有一个凝聚力的目的(想TextBox
, ComboBox
, Label
),而不是作为一个整体共同行动(虽然这并不一定是这种情况)。
UserControl
的是人们不熟悉通常更容易WPF
,因为他们可以在视觉设计。
我的建议是一个开始UserControl
。 当你变得更熟悉的方式,您可以随时在以后重构为一个自定义的控制这个WPF
工作。 创建控件作为自定义控制需要的知识ControlTemplate
S和Style
S作为你将需要提供自己的定义的外观和感觉你的控制。
当所有说的和做的,只要控制行为正确,也无所谓哪种方法使用。
见这个职位的两种方法解决同一问题的一个例子。 文章作者希望它可以在主内容的前模态呈现内容的控制。 文章作者实际执行它作为回答了自己的问题UserControl
。 我增加了一个答案,它创建控件作为自定义控件的职位,但都具有相同的最终效果。
最好的解释是在MSDN 。 CustomControl更多的是“虚拟”的名字,也没有所谓的“CustomControl”在WPF类,而不是它意味着建立在WPF控件类中的一座山顶一类新的建筑,像Control
, ItemsControl
,甚至像更具体的控制TextBox
或Button
。
针对您的特殊情况下,用户控件应该是足够的,创造一个CustomControl的东西,可以很容易避免。 虽然它不是一个坏事情,很多人,尤其是WPF从初学者的WinForms未来倾向于继承更多然后必要的。
如果你有一个视图模型 ,你希望它使用的用户控制 ,以创建视图。
如果你需要的是有没有具体的视图模型的自主控制,
你可能需要一个自定义的控制 。
如果您发现您需要作为一个整体的功能,已经在其他控件存在 ,您需要重写现有控件模板 。
(即:一个菱形按钮-你需要重写按钮控件模板。)
关于附加的属性和附加-行为,当你有,你想与更多的性能扩展控制那些是有用的,或者你希望它表现得比它的默认行为略有不同。
在OP中描述的组合物所提供的情况下,也可与用户控制或定制控制来实现。 我希望能有一个自定义的控制,因为没有设置具体的视图模型,“输入”只绑定到一个项目集合的属性。
哦,还有,我是稍微迟到抱歉。
如果这是某种你第一次的楼宇控制系统,我建议用户控件作为VS可以更轻松地设计其界面。 自定义控件更强大,但你要清楚你控制的逻辑从它的界面分离,这需要更多的准备。
您可以轻松实现可视化设计CustomControl
。 创建新UserControl
(或窗口)。 在设计可视化创建XAML它的结构。 内部所产生的XAML的复制粘贴体ControlTemplate
新的CustomControl
(例如,在通用的主题文件)。
如果我没记错的话,你也能够直接视觉设计CustomControl模板,在Blend。
当然,你也可以例如在一个窗口中的WIP CustomControl并把窗口的设计视图中的VisualStudio控件的XAML视图上方新的面板。 从样式模板的一些XAML绑定不会像这样,虽然设计师展示,直到我重建。
[恕我直言GUI主要是一个视觉问题,应该没有,也不需要,在代码中创建。 ]
那么创建你需要实现它作为一个用户控件的自定义控制。 您自己的用户控件调用自定义控制。 这是很简单的。
用户控件是一个包含自定义内容的基类:
<UserControl>
Your custom WPF content
</UserControl>
我不完全同意文章认同。 然而,在你的情况,你需要一个用户控件在用户界面,你可以重新使用后者。