wpf 中 自定义模板关键属性 ContentPresenter 和 ItemsHost

在 WPF 中,<ContentPresenter /> 是一个非常重要的元素,通常用于自定义控件模板中。它的主要作用是表示控件的内容,并且允许你将内容(例如文本、图像或其他控件)插入到控件的特定位置。

1‌. 自定义 Button 模板‌:

<ControlTemplate TargetType="Button">
    <Border Background="{TemplateBinding Background}"
            BorderBrush="{TemplateBinding BorderBrush}"
            BorderThickness="{TemplateBinding BorderThickness}">
        <ContentPresenter HorizontalAlignment="Center"
                          VerticalAlignment="Center"/>
    </Border>
</ControlTemplate>

2.自定义 ListBoxItem 模板‌:

<ControlTemplate TargetType="ListBoxItem">
    <Border Background="{TemplateBinding Background}"
            BorderBrush="{TemplateBinding BorderBrush}">
        <ContentPresenter />
    </Border>
</ControlTemplate>

ItemsHost 是一个属性,通常用于 ItemsControl 或其派生类(例如 ListBoxComboBoxListView 等)。它用于指定控件中显示子项的容器。

在这个例子中,StackPanel 被设置为 ItemsHostItemsControl 的子项会显示在 StackPanel 中

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

在某些控件中,ContentPresenter 和 ItemsHost 可能会同时存在。例如,在自定义 TabControl 时:

<ControlTemplate TargetType="TabControl">
    <DockPanel>
        <!-- ItemsHost:显示 TabItem 标题 -->
        <TabPanel IsItemsHost="True" DockPanel.Dock="Top"/>
        <!-- ContentPresenter:显示选中的 TabItem 内容 -->
        <ContentPresenter ContentSource="SelectedContent"/>
    </DockPanel>
</ControlTemplate>

在这个例子中:

  • TabPanel 是 ItemsHost,用于显示所有 TabItem 的标题。
  • ContentPresenter 用于显示当前选中的 TabItem 的内容。

 

posted on 2025-03-26 11:44  空明流光  阅读(115)  评论(0)    收藏  举报

导航