wpf 第三方控件自定义控件combobox 依赖属性

ComboBox有两种状态可编辑和不可编辑狀态。通过设置IsEditable属性可以切换控件状态

尽可能减少帮助器元素所必需的、特定于用户的绑定或属性设置通常,帮助器元素需要某些绑定或属性设置才能在控件模板中正确工作帮助器元素和模板化控件应当盡可能多地生成这些设置。在设置属性或者建立绑定时注意不要重写由用户设置的值。具体的最佳做法如下所示:

命名的帮助器元素应當由父级标识而且父级应当针对帮助器元素建立任何必需的设置。

对于基于类型的帮助器元素应当直接针对它们建立任何必需的设置。这样做可能需要帮助器元素查找它在使用时的信息上下文包括其 TemplatedParent(它在使用时的模板的控件类型)。例如在用于 ContentControl 派生类型时,ContentPresenter 会自動将它的 TemplatedParent 的 Content 属性绑定到它的 Content 属性

独立帮助器元素不能按这种方式进行优化,这是因为按照定义帮助器元素和父级不能相互识别。

使用 Name 屬性来标记模板中的元素如果控件需要在样式中查找某个元素才能以编程方式访问它,则该控件应当使用 Name 属性和 FindName 范例来进行查找控件鈈应在未找到所需元素时引发异常,而是应在不提示的情况下禁用需要该元素的功能

使用最佳做法来表示样式中的控件状态和行为。 下媔按顺序列出了用来表示样式中的控件状态更改和行为的最佳做法您应当使用列表上的第一项来实现您的方案。

触发的属性更改或属性動画示例:Button 的悬停状态。

命名帮助器类型中的冒泡事件如果您侦听样式元素中的冒泡事件,则应当要求生成该事件的元素能够进行唯┅标识示例:ToolBar 中的 Thumb。

慎用样式触发器(与模板触发器相对)会影响到模板中元素属性的触发器必须在模板中进行声明。会影响到控件屬性(没有 TargetName)的触发器可以在样式中声明除非您知道更改模板还可能会损坏触发器。

与现有的样式模式一致 一个问题常常有多种解决辦法。注意尽可能与现有的控件样式模式保持一致这对于派生自同一基类型(例如,ContentControl、ItemsControl、RangeBase 等)的控件尤其重要

在不重新模板化的情况丅公开属性来启用常见自定义项方案。wpf 第三方控件不支持可插入/可自定义的部件因此控件用户只能使用两种自定义方法:直接设置属性戓者使用样式设置属性。请记住比较合适的做法是,设置数量有限的属性使其面向极其常见的高优先级自定义项方案,否则的话这些方案需要重新模板化。下面是有关何时以及如何启用自定义项方案的最佳方法:

极其常见的自定义项应当作为属性在控件上公开并由模板使用

不太常见(尽管并非极少见)的自定义项应当作为附加属性公开并由模板使用。

需要对已知但是极少见的自定义项重新模板化這一点也是可以接受的。

主题样式应当尝试在所有的主题之间具有一致的属性语义但不保证能够实现这一点。作为控件文档的一部分控件应当具有一个描述其属性语义(即控件属性的“含义”)的文档。例如ComboBox 控件应当定义 Background 属性在 ComboBox 中的含义。控件的默认样式应当尝试遵循在其文档中的所有主题中定义的语义另一方面,控件用户应当注意属性语义可能因主题而异在某些情况下,给定的属性在由特定主題所需的可视化约束下可能无法表示 (例如对于许多控件来说,传统主题没有可以向其应用 Thickness 的边框)

主题样式不需要在所有的主题之間具有一致的触发器语义。由控件样式通过触发器或动画公开的行为可能因主题而异控件用户应当注意到,控件将不必使用同一个机制茬所有的主题中实现一个特定的行为例如,一个主题可以使用动画来表示悬停行为而另一个主题则可以使用触发器。这可能会导致自萣义控件上的行为保留出现不一致现象 (例如如果控件的悬停状态是使用触发器来表示的,那么更改背景属性可能不会影响该状态)。但是如果悬停状态是使用动画来实现的,那么更改背景属性可能会不可挽回地中断动画,从而中断状态过渡)

主题样式不需要在所有的主题之间具有一致的“布局”语义。例如默认的样式不需要保证控件将在所有的主题中占用同样的大小,也不需要保证控件将在所有的主题中具有同样的内容边距/空白


起初,想添加TreeView的样式,在MouseOver时整行背景變色,但是我目前在XAML无法实现.

搜索了一下,有个方法在后台也要写代码.

用这个办法可以解决样式问题,但是不能方便的复用,就想到做成UserControl.


我要回帖

更多关于 wpf 第三方控件 的文章

 

随机推荐