gpt4 book ai didi

c# - 模板之间的区别

转载 作者:太空狗 更新时间:2023-10-29 23:01:03 26 4
gpt4 key购买 nike

有什么区别

  • 控件模板
  • 数据模板
  • 分层数据模板
  • 项目模板

最佳答案

控制模板

ControlTemplate 指定控件的视觉结构和视觉行为。您可以通过为控件提供新的 ControlTemplate 来自定义控件的外观。创建 ControlTemplate 时,您可以替换现有控件的外观而不更改其功能。例如,您可以将应用程序中的按钮设为圆形而不是默认的方形,但按钮仍会引发 Click 事件。

ControlTemplate 的一个例子是

创建按钮

<Button Style="{StaticResource newTemplate}" 
Background="Navy"
Foreground="White"
FontSize="14"
Content="Button1"/>

按钮的控件模板

<Style TargetType="Button" x:Key="newTemplate"> 
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="RootElement">
<!--Create the SolidColorBrush for the Background
as an object elemment and give it a name so
it can be referred to elsewhere in the control template.-->
<Border.Background>
<SolidColorBrush x:Name="BorderBrush" Color="Black"/>
</Border.Background>
<!--Create a border that has a different color by adding smaller grid.
The background of this grid is specificied by the button's Background
property.-->
<Grid Margin="4" Background="{TemplateBinding Background}">
<!--Use a ContentPresenter to display the Content of
the Button.-->
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="4,5,4,4" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

更多关于 ControlTemplate

数据模板

数据模板与控制模板的概念相似。它们为您提供了一个非常灵活和强大的解决方案来替换 ListBox、ComboBox 或 ListView 等控件中数据项的视觉外观。 WPF 控件具有支持自定义数据表示的内置功能。<​​/p>

DataTemplate 的一个例子是

<!-- Without DataTemplate -->
<ListBox ItemsSource="{Binding}" />

<!-- With DataTemplate -->
<ListBox ItemsSource="{Binding}" BorderBrush="Transparent"
Grid.IsSharedSizeScope="True"
HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<TextBox Grid.Column="1" Text="{Binding Value }" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

更多关于 DataTemplates and Triggers

项目模板

您使用 ItemTemplate 来指定数据对象的可视化。如果您的 ItemsControl 绑定(bind)到一个集合对象并且您没有使用 DataTemplate 提供特定的显示说明,则每个项目的结果 UI 都是基础集合中每个对象的字符串表示形式。

项目模板的一个例子是

<ListBox Margin="10" Name="lvDataBinding">
<ListBox.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="Name: " />
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<TextBlock Text=", " />
<TextBlock Text="Age: " />
<TextBlock Text="{Binding Age}" FontWeight="Bold" />
<TextBlock Text=" (" />
<TextBlock Text="{Binding Mail}" TextDecorations="Underline" Foreground="Blue" Cursor="Hand" />
<TextBlock Text=")" />
</WrapPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

当您在 ItemsControl 上设置 ItemTemplate 时,生成的 UI 如下(以 ListBox 为例):

  1. 在内容生成期间,ItemsPanel 发起请求,要求 ItemContainerGenerator 为每个数据项创建一个容器。对于 ListBox,容器是一个 ListBoxItem。生成器回调 ItemsControl 以准备容器。

  2. 部分准备工作涉及将 ListBox 的 ItemTemplate 复制为 ListBoxItem 的 ContentTemplate。

  3. 与所有 ContentControl 类型类似,ListBoxItem 的 ControlTemplate 包含一个 ContentPresenter。应用模板时,它会创建一个 ContentPresenter,其 ContentTemplate 绑定(bind)到 ListBoxItem 的 ContentTemplate。

  4. 最后,ContentPresenter 将该 ContentTemplate 应用于自身,并创建 UI。

如果您定义了多个 DataTemplate,并且您想要提供以编程方式选择和应用 DataTemplate 的逻辑,请使用 ItemTemplateSelector 属性。

ItemsControl 为视觉自定义提供了极大的灵 active ,并提供了许多样式和模板属性。使用 ItemContainerStyle 属性或 ItemContainerStyleSelector 属性设置样式以影响包含数据项的元素的外观。例如,对于ListBox,生成的容器是ListBoxItem控件;对于 ComboBox,它们是 ComboBoxItem 控件。要影响项目的布局,请使用 ItemsPanel 属性。如果您在控件上使用分组,则可以使用 GroupStyle 或 GroupStyleSelector 属性。

有关详细信息,请参阅 Data Templating Overview.

关于c# - 模板之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12542229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com