首页 > 其他分享 >十分钟带你搞懂WPF模板Template

十分钟带你搞懂WPF模板Template

时间:2023-10-13 19:22:17浏览次数:36  
标签:控件 样式 Button Template 搞懂 ListBox WPF 模板

三类模板(ControlTemplate,DataTemplate,ItemsPanelTemplate )

ControlTemplate(所有控件的显示渲染)

是用来重写现有控件的可视结构的,一般和依赖属性和附加属性结合,加上绑定,控件可以获得很好的扩展。

demo

以下是一个简单的WPF ControlTemplate样式示例。这个示例是为一个Button控件定义的样式。

<Window.Resources>  
    <Style TargetType="Button">  
        <Setter Property="Template">  
            <Setter.Value>  
                <ControlTemplate TargetType="Button">  
                    <Border Name="Border"   
                           BorderBrush="Black"   
                           BorderThickness="1"   
                           Background="{TemplateBinding Background}"   
                           Padding="5">  
                        <ContentPresenter Content="{TemplateBinding Content}"   
                                          ContentTemplate="{TemplateBinding ContentTemplate}"   
                                          HorizontalAlignment="Center"   
                                          VerticalAlignment="Center"/>  
                    </Border>  
                </ControlTemplate>  
            </Setter.Value>  
        </Setter>  
    </Style>  
</Window.Resources>  
  
<Grid>  
    <Button Content="Hello, World!" />  
</Grid>

这个样式中,我们创建了一个新的ControlTemplate,为Button控件定义了一个新的外观。这个模板包含一个Border,我们设置了一些其属性,如背景色、边框颜色和边框宽度。然后,我们添加了一个ContentPresenter,用于显示Button的Content。

在XAML中使用这个样式,只需要将样式应用到任何Button控件即可。在这个例子中,我们直接在Grid中创建了一个Button,它会自动应用这个样式。

DataTemplate(数据集合呈现控制)ListBox

概念:用于定义数据对象的可视化结构的。将数据集合绑定给控件
用途:用于数据集合控件:ItemsControl,ListBox,ListView,DataGrid

demo

以下是一个简单的WPF DataTemplate示例。这个示例是为一个具有自定义数据对象(例如名为“Person”)的控件定义的样式。

<Window.Resources>  
    <DataTemplate x:Key="PersonDataTemplate">  
        <StackPanel>  
            <TextBlock Text="{Binding Name}" FontWeight="Bold" />  
            <TextBlock Text=" (" />  
            <TextBlock Text="{Binding Age}" FontSize="smaller" />  
            <TextBlock Text=")" />  
        </StackPanel>  
    </DataTemplate>  
</Window.Resources>  
  
<Grid>  
    <ListBox ItemsSource="{Binding Persons}" ItemTemplate="{StaticResource PersonDataTemplate}" />  
</Grid>

在ListBox控件中,我们通过设置“ItemsSource”属性来绑定一个Persons集合,并通过设置“ItemTemplate”属性来应用我们之前定义的“PersonDataTemplate”。这样,ListBox将会自动根据PersonDataTemplate展示每个Person对象的数据。

ItemsPanelTemplate 容器模板(数据集合排列控件)

ItemsPanelTemplate可以用来定义集合控件的容器外观。ListBox的每一项的排列方式是遵循StackPanel的
原则,也就是从上到下的排列方式。如果要实现从左到右排列.ComboBox默认是竖直排列的,我们要横着排列,只需要定义ItemsPanel为WrapPanel,就可以了。

关注我,WPF FlyUI框架作者
github地址:https://github.com/AatroxBot/FlyUI.Demo.git
码云地址:https://gitee.com/Aatrox1/fly-ui-demo.git

标签:控件,样式,Button,Template,搞懂,ListBox,WPF,模板
From: https://www.cnblogs.com/ckblogs/p/17762964.html

相关文章

  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列
    我们在WPF应用端的界面中,使用lepoco/wpfui来做主要的入口框架,这个项目它的菜单内置了不少图标,我们需要在动态菜单的配置中,使用它作为图标的展示处理,本篇随笔介绍如何基于图标枚举集合进行图标的展示和选择处理。并扩展到Font-Awesome-WPF的处理进行展示和选择。1、lepoco/wpfui......
  • 牛腩WPF框架
     牛腩WPF框架 上中下三部分,中间分左右二部分,点击左边右边tab标签页显示 标签页关闭的功能抄https://www.cnblogs.com/tsliwei/p/5625398.html的,不错不错。。 源码GIT地址:https://niunan-01.coding.net/public/lx0012.niunanwpfkuangjia/lx0012/git/files 部分代码:......
  • WPF中Image控件绑定数据源,解决图片被占用问题
    WPF中Image控件的数据源如果设置为路径,或者后台通过Image.FromFile来绑定,该图片将被占用,如要进行图片压缩、删除等操作则会报图片被占用的错;所以可以从内存中加载图片进行绑定。以下为MVVMLight模式,首先增加一个图片路径值转换的类publicclassImageConvert:IValueConverte......
  • 「UI开发」DevExpress WPF Pivot Grid组件可轻松实现多维数据分析!(一)
    DevExpressWPF PivotGrid组件是一个类似excel的数据透视表,用于多维数据分析和跨选项卡报表生成。众多的布局自定义选项让您完全控制其UI,以用户为中心的功能使其更易于部署。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过De......
  • WPF使用Winform、ActiveX(OCX)控件
    一、调用Winform控件1、添加“WindowsFormsIntegration”程序集引用 2、在前端代码设计处使用命名控件代码:xmlns:wf="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"示例图: 3、然后,就可以在XAML文件中这样使用WindowsFormsHo......
  • 终于搞懂如何用Java去除HTML标签了
    在我平时的工作中,偶尔会用Java做一些解析HTML的工作。有的时候我需要删除所有的HTML标签,只保留纯文字内容。这个问题在做过一些爬虫工作的朋友来说很简单。下面来说说,我们平时使用到的集中解析的方法。使用正则表达式通过爬虫爬到的HTML内容,从程序角度来讲,就是一个字符串。我们......
  • WPF 笔迹算法 从点集转笔迹轮廓
    本文将告诉大家一些笔迹算法,从用户输入的点集,即鼠标轨迹点或触摸轨迹点等,转换为一个可在界面绘制显示笔迹画面的基础数学算法。尽管本文标记的是WPF的笔迹算法,然而实际上本文更侧重基础数学计算,理论上可以适用于任何能够支持几何绘制的UI框架上,包括UWP或WinUI或UNO或MA......
  • Wpf DataGrid设置列标题动态绑定实例
    在WPF中,可以使用DataGrid控件来显示和编辑表格式的数据。要设置DataGrid列标题的动态绑定,可以使用DataGrid的列定义和绑定功能。以下是一个示例,展示如何使用动态绑定设置DataGrid的列标题:在XAML中定义DataGrid控件,并为其定义列:<DataGridAutoGenerateColumns=......
  • typescript: Template Method pattern
     /***TemplateMethodpattern模版方法是一种行为设计模式,它在基类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。*file:Templatets.ts*TheAbstractClassdefinesatemplatemethodthatcontainsaskeletonofsome*algorithm,......
  • WPF椭圆弧形弧线控件
    usingSystem;usingSystem.Windows;usingSystem.Windows.Media;usingSystem.Windows.Shapes;namespaceWpfApp2.Controls{publicclassArc:Shape{Size_size=Size.Empty;protectedoverrideGeometryDefiningGeometry{......