父子元素之间的关系(ItemsPresenter)

来源:互联网 发布:grub安装linux 编辑:程序博客网 时间:2024/04/20 02:57


有时候控件并非维护本身逻辑,而是依赖于父子元素的,如了上诉的ContentPresenter,我们还有一个非常常用的ListBox控件,因为继承自ItemsControl,所以有一个ItemsPanel属性作为集合元素承载容器,但集合控件本身却不负责呈现控件,那么这个任务就留给了子元素ItemsPresenter,其实用也很简单,只要把ItemsPresenter放在内部模板中,那么ItemsPresenter则会去检测父元素是否为集合控件,然后将ItemsPanel添加到其内部视觉树当中

        <Stylex:Key="{x:TypeItemsControl}" TargetType="{x:TypeItemsControl}"> <SetterProperty="Template"> <Setter.Value> <ControlTemplateTargetType="{x:TypeItemsControl}"> <BorderBackground="{TemplateBindingBackground}" BorderBrush="{TemplateBindingBorderBrush}" BorderThickness="{TemplateBindingBorderThickness}" Padding="{TemplateBindingPadding}" SnapsToDevicePixels="true"> <ItemsPresenterSnapsToDevicePixels="{TemplateBindingSnapsToDevicePixels}"/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>

如下视觉树,StackPanel作为ItemsControl的默认容器

image


0 0
原创粉丝点击