使用WPF重写TextBox模板的时候为什么要给里面的ScrollViewer控件添加名称"PART_ContentHost"
先看宝典怎么说的吧
上面是wpf宝典里面的说的,在创建无外观控件的那一个章节里面,就是控件样式与内部逻辑分开。意思就是:当我们创建一个控件样式的时候,里面的元素属性什么的肯定要与这个控件的内部属性进行绑定,当一个控件比较复杂的时候,所创建的绑定表达式就会很多。这个时候wpf就有另外一个功能就是在控件内部重写OnApplyTemplate()方法,这个方法继承自FrameworkElement类。就是在这个方法里面通过固定的元素名称检索模板里面的的控件,用代码进行绑定,而这个TextBox控件只有一个就是这个"PART_ContentHost",实际上就是换了一种方法绑定而已。
就像上面这个图那样说那样,如果在检索的时候没有发现这个元素,就说明没有这个功能,所有重写TextBox模板的时候需要在内部容器里面加一个ScrollViewer控件,并给他命名 x:Name="PART_ContentHost",TextBox控件内部在检索的时候就找得到这个元素,从而做好了绑定。
ScrollViewer 属于内容控件的一种 继承自ContentControl,可以将超出这个控件的部分用滚动条来滑动展示。
至于这个TextBox具体内部怎么做的,我想他应该是先拿到到这个控件,将它的Content属性绑定到一个内部的一个我们输入的字符串的属性上的把,我猜的,不过这个不重要,知道为啥要写这个名字就行了,会用就行。