我正在尝试使用Expression Blend在Silverlight中设置ComboBox的样式。
ComboBox模板包含四个项目:
ContentPresenterBorder
DisabledVisualElement
FocusVisualElement
Popup
ContentPresenterBorder
和Popup
都包含子元素,并且还有一个小图标,看起来像带有绿色勾号的拼图块。鼠标悬停在此图标上,我收到工具提示:
Popup是一个控制部分。
这是什么意思?
答案 0 :(得分:5)
这个blog post解释了部分,但实际上它是一个具有预定义类型和名称的元素。假设我想创建一个名为FancyControl
的新控件。在我的控制范围内,我想要两个滑块,无论出于何种原因,我控制的最佳方式是直接访问在我的代码隐藏中为我的控件创建的Slider
对象。
我可以给他们任何旧名称(即“左”和“右”),然后使用FancyControl.OnApplyTemplate
在GetTemplatedChild
内查找实例。使用任意名称的问题是,如果其他人想要重新控制我的控制权,他们不知道Sliders
需要将名称“左”和“右”用于我的控制权工作
Microsoft使用了以PART_
为前缀的这些元素名称的约定。因此,当有人重新控制我的控制权时,他们会立即知道Slider
必须具有相同的名称(即“PART_Left”和“PART_Right”),否则他们可能会失去功能。
TemplatePartAttribute可用于指示有效的部件名称及其关联类型。设计师可以使用它,例如Blend,以正确检测命名部件。
还值得一提的是,控件的设计应该如果缺少一个命名部分,那么它应该继续使用较少的功能(即它不应该抛出异常)。