WPF提供了两种方案,一是利用TemplatePartAttribute,二是使用Command. 1.1 TemplatePartAttribute Control authors apply this attribute to the class definition to inform template authors the types of the parts to use for styling the class. These parts are usually required in the template and have a specific...
在这些类的定义中,我们也会发现一些端倪,例如ProgressBar类的定义: [TemplatePart(Name ="PART_GlowRect", Type =typeof(FrameworkElement))] [TemplatePart(Name="PART_Indicator", Type =typeof(FrameworkElement))] [TemplatePart(Name="PART_Track", Type =typeof(FrameworkElement))]publicclassProgressBar : Ran...
{ [TemplatePart(Name = HueSliderColorTemplateName, Type = typeof(Slider))] [TemplatePart(Name = CanvasTemplateName, Type = typeof(Canvas))] [TemplatePart(Name = ThumbTemplateName, Type = typeof(Thumb))] [TemplatePart(Name = ButtonTemplateName, Type = typeof(Button))] public class ColorPick...
這些 TemplatePart 屬性 (Attribute),表示具名控制項] 或 [新範本必須具有完整功能的項目。對於 [月曆] 控制項新的範本必須至少兩個部分: CalendarItem,以名稱 PART_CalendarItem] 和 [PART_Root 名稱的一個面板。(在預設的 [行事曆] 範本中,PART_Root 面板是在 StackPanel)。 這是不太可能您將會被取代範...
有时,为了表明控件期待在ControlTemplate存在某个特定部件,防止编辑ControlTemplate的开发人员删除它,控件上会添加添加TemplatePartAttribute协定。上面代码中即包含这个协定: 代码语言:javascript 复制 [TemplatePart(Name=ContentPresenterName,Type=typeof(UIElement))] ...
[TemplatePart(Name = "PART_StackPanel", Type = typeof(StackPanel))] public class ClassicRichTextBox : RichTextBox {...} 1. 2. 然后只要重写RichTextBox的方法,往里面加自己想要的逻辑就可以了。这里的行号可以根据改变字体的大小而变动。
[TemplatePart(Name = "PART_ClearFilterButton", Type = typeof(Button))] public class FilterTextBox : Control{ ... } 我们还设想只有在文本框里有文本的时候,一个“清空”的按钮才显示出来。我们创建一个DataTriger来实现这个想法: <ControlTemplate TargetType="{x:Type local:FilterTextBox}"> ...
对于上面的示例,还有最后一处应予改进。良好的设计指导原则建议为控件声明添加TemplatePart特性,以记录在控件模板中使用了哪些部件名称,以及为每个部件使用了什么类型的控件。从技术角度看,这一步不是必须的,但该文档可为其他使用自定义类的用户提供帮助。
[TemplatePart(Name = PopupTemplateName, Type = typeof(Popup))] publicclassTimePicker:Control { privateconststringTimeSelectorTemplateName ="PART_TimeSelector"; privateconststringEditableTextBoxTemplateName ="PART_EditableTextBox"; privateconststringPopupTemplateName ="PART_Popup"; ...
有您将看到 TemplatePart 属性的集合。这些 TemplatePart 属性指示指定的控件或新模板必须具有完全正常工作的元素。对于日历控件,新模板都必须有至少两个部分: 名 PART_CalendarItem 的 CalendarItem 和同名 PART_Root 的面板。(在默认日历模板中 PART_Root 面板是一个 StackPanel。 很不您将会在的日历替换模板中,但...