WPF-08 控件模板

模板是描述控件外观,WPF中每个控件都有一个默认的模板,你可以通过定义模板来重写控件可视化外观和行为,WPF中有两种常用的模板Control Template和Data Template

Control Template

控件模板定义了控件的可视化外观,所有的UI控件都有自己默认的可视化外观和行为,例如Button按钮,当我们鼠标移上去时会改变背景色,我们自定义一个Button按钮

<Window x:Class="Example_09.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Example_09"mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"><Window.Resources><ControlTemplate x:Key="ButtonTemp" TargetType="Button"><Grid><Ellipse  x:Name="rectangle"><Ellipse.Fill><SolidColorBrush Color="Red"></SolidColorBrush></Ellipse.Fill></Ellipse><ContentPresenter Content="{TemplateBinding Content}" VerticalAlignment="Center"HorizontalAlignment="Center"></ContentPresenter></Grid><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="rectangle" Property="Fill"><Setter.Value><SolidColorBrush Color="Green"></SolidColorBrush></Setter.Value></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Window.Resources><StackPanel><Button Width="200" Height="150" Content="自定义控件模板" Template="{StaticResource ButtonTemp}"></Button><Button Width="200" Height="150" Margin="20" Content="默认控件外观"></Button></StackPanel>
</Window>

Data Template

数据模板定义了你的数据在控件中如何呈现以及格式化。通常用在列表控件中,例如ComboBox, ListBox, 等,默认ListBox绑定出来数据的结果

d978e5f6731ee6d304159e4fd016d935.png

我们通过重写数据模板显示内容更丰富一些:

<Window x:Class="Example_09.ListBoxControl"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Example_09"mc:Ignorable="d"Title="ListBoxControl" Height="450" Width="800"><Window.Resources><DataTemplate x:Key="personTemplate"><Border Name="border" BorderBrush="Aqua" BorderThickness="1" Padding="5" Margin="5"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition  Width="200"/><ColumnDefinition  Width="100"/><ColumnDefinition  Width="100"/></Grid.ColumnDefinitions><TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" Text="姓名:"/><TextBlock Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" Text="{Binding Path=Name}" /><TextBlock Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" Text="性别:"/><TextBlock Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" Text="{Binding Path=Sex}"/><TextBlock Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center" Text="年龄:"/><TextBlock Grid.Row="2" Grid.Column="2" HorizontalAlignment="Center" Text="{Binding Path=Age}"/><TextBlock Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center" Text="户籍:"/><TextBlock Grid.Row="4" Grid.Column="2" HorizontalAlignment="Center" Text="{Binding Path=Residence}"/><Image Grid.RowSpan="4" Grid.Column="0" HorizontalAlignment="Center" Source="{Binding Path=Image}"></Image></Grid></Border></DataTemplate></Window.Resources><Grid><ListBox x:Name="myListBox" ItemTemplate="{StaticResource personTemplate}"></ListBox></Grid>
</Window>
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media.Imaging;
namespace Example_09
{public partial class ListBoxControl : Window{ObservableCollection<Person> Persons = new ObservableCollection<Person>();public ListBoxControl(){InitializeComponent();Person person = new Person();myListBox.ItemsSource = person.GetPersonList();}}public class Person{public string Name { get; set; }public string Sex { get; set; }public int Age { get; set; }public string Residence{get; set;} = "Hong Kong";public BitmapImage Image { get; set; }public override string ToString(){return Name.ToString();}public ObservableCollection<Person> GetPersonList(){ObservableCollection<Person> Persons = new ObservableCollection<Person>();Person person = new Person();person.Name = "刘德华";person.Sex = "男";person.Age = 60;person.Image = new BitmapImage(new Uri(System.IO.Directory.GetCurrentDirectory() + "/Image/刘德华.jpg"));Persons.Add(person);person = new Person();person.Name = "黎明";person.Sex = "男";person.Age = 55;person.Image = new BitmapImage(new Uri(System.IO.Directory.GetCurrentDirectory() + "/Image/黎明.jpg"));Persons.Add(person);person = new Person();person.Name = "郭富城";person.Sex = "男";person.Age = 56;person.Image = new BitmapImage(new Uri(System.IO.Directory.GetCurrentDirectory() + "/Image/郭富城.jpg"));Persons.Add(person);person = new Person();person.Name = "张学友";person.Sex = "男";person.Age = 61;person.Image = new BitmapImage(new Uri(System.IO.Directory.GetCurrentDirectory() + "/Image/张学友.jpg"));Persons.Add(person);return Persons;}}
}

b65269c549d8365753aa55fbf949473e.png

上图是我们重写控件的数据模板之后运行效果,当然你也可以再加一些样式和触发器来美化效果,当鼠标移动上去以及离开显示什么效果,选中一行的时候显示什么效果,都可以实现,这也是WPF魅力所在以及强大之处!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玄学搜索\随稽化

正解又不会写&#xff0c;又懒得去想 只好每次考试大大暴力&#xff0c;维持一下生活了 ----------------------- P1337 [JSOI2004]平衡点 / 吊打XXX 题目描述 有n个重物&#xff0c;每个重物系在一条足够长的绳子上。每条绳子自上而下穿过桌面上的洞&#xff0c;然后系在一起。…

第0次作业

问题1:你为什么选择计算机专业&#xff1f;你认为你的条件如何&#xff1f; 答:我平时比较喜欢研究一些自己认为神秘的东西&#xff0c;我认为计算机就是这样的神秘东西&#xff01;所以我选择这个专业&#xff01;我认为我自己可以学会计算机这个专业&#xff01;我对自己有信…

Nginx +Tomcat 实现动静态分离(转)

Nginx Tomcat 实现动静态分离 动静态分离就是Nginx处理客户端的请求的静态页面(html页面)或者图片&#xff0c;Tomcat处理客户端请求的动态页面&#xff08;jsp页面&#xff09;&#xff0c;因为Nginx处理的静态页面的效率高于Tomcat。 一&#xff0e;Nginx简介&#xff1a; Ng…

Beanstalked的初步了解和使用(包括利用beanstalkd 秒杀消息队列的实现)

一 Beanstalkd 是什么 Beanstalkd&#xff0c;一个高性能、轻量级的分布式内存队列系统二 Beanstalkd 特性 1. 优先级&#xff08;priority&#xff09; 注&#xff1a;优先级就意味 支持任务插队&#xff08;数字越小&#xff0c;优先级越高&#xff0c;0的优先级最高&#…

WPF效果第二百篇之再玩Gamma曲线

前面效果中使用比较low的方式实现了2.4的Gamma曲线;虽说后面加了点动画呈现效果,但也就是个过渡版;今天才基本符合需求的效果:1、还是基于WPF效果第一百七十八篇之贝塞尔曲线他来实现的:3个ListBox 3个LandmarkControl2、在LandmarkControl增加插点位事件View:LandmarkControl …

2018企业面试总汇(答案请自行搜罗) 新增19年阿里面题(反向拓展技术栈)

Java 1.多个线程同时读写&#xff0c;读线程的数量远远大于写线程&#xff0c;你认为应该如何解决并发的问题&#xff1f;你会选择加什么样的锁&#xff1f; 2.JAVA的AQS是否了了解&#xff0c;它是干嘛的&#xff1f; 3.除了synchronized关键字之外&#xff0c;你是怎么来保障…

skynet源码阅读5--协程调度模型

注&#xff1a;为方便理解&#xff0c;本文贴出的代码部分经过了缩减或展开&#xff0c;与实际skynet代码可能会有所出入。 作为一个skynet actor&#xff0c;在启动脚本被加载的过程中&#xff0c;总是要调用skynet.start和skynet.dispatch的&#xff0c;前者在skynet-os中…

ASP.NET Core GRPC 和 Dubbo 互通

一.前言Dubbo 是比较流行的服务治理框架&#xff0c;国内不少大厂都在使用。以前的 Dubbo 使用的是私有协议&#xff0c;采集用的 hessian 序列化&#xff0c;对于多语言生态来说是极度的不友好。现在 Dubbo 发布了新版本 v3&#xff0c;推出了基于 gRPC 的新协议 Triple&#…

详解C# 迭代器

[引用&#xff1a;https://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html] 迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子&#xff0c;他是一种简化对象间通讯的模式&#xff0c;也是一种非常容易理解和使用的模式。简单来说&#xff0c;迭代器模…

利用redis List队列简单实现秒杀 PHP代码实现

一 生产者producer部分 --------------------------------producer 部分注释------------------------------------------------------------ 用户在页面请求之后, 获取到用户uid , 跳转到这个加入队列的方法 (这里直接在producer中模拟了多个uid) 在方法内部判断redis队列长…

使用Filezilla 与 linux远程服务器传输文件时,设置默认打开编辑器

1. 点击编辑 2. 选择设置&#xff0c;点击文本编辑 3. 设置编辑器目录 4. 确定作用&#xff1a; 这样设置之后&#xff0c;可以实现在远程站点栏直接下载并使用phpstorm编辑的作用 正常需要下载之后&#xff0c;再去本地相应下载目录打开&#xff0c;然后再进行上传文件&#x…

SDOI2017 新生舞会

01规划 a1a2a3...ai/b1b2b2..bi最大 设一个k 使得 a1a2a3...ai/b1b2b3...bi>k 变换式子得到 a1a2a3...ai>(b1b2b3..bi)*k a1-b1*ka2-b2*ka3-b3*k...ai-bi*k>0 ai-bi*k即流量 最大费用流二分答案 来&#xff0c;上代码&#xff1a; #include <cmath> #include &l…

在 .NET 中使用 FluentValidation 进行参数验证

不用说&#xff0c;参数验证很重要&#xff0c;无效的参数&#xff0c;可能会导致程序的异常。如果使用Web API或MVC页面&#xff0c;那么可能习惯了自带的规则验证&#xff0c;我们的控制器很干净&#xff1a;public class User {[Required]public string FirstName { get; se…

在win10系统下怎样快速切换任务视图

2019独角兽企业重金招聘Python工程师标准>>> 切换窗口&#xff1a;Alt Tab 任务视图&#xff1a;Win Tab (松开键盘界面不会消失) 切换任务视图&#xff1a;Win Ctrl 左/右 创建新的虚拟桌面&#xff1a;Win Ctrl D 关闭当前虚拟桌面&#xff1a;Win Ctrl F4…

uwp应用在debug模式下运行正常,编译为release版本的时候抛出异常

原因是在代码中使用了dynamic关键字&#xff0c;导致release时.net native优化了代码造成元数据丢失 所以在代码中要尽量不用dynamic。转载于:https://www.cnblogs.com/poison/p/7532142.html

Linux上搭建Samba,实现windows与Linux文件数据同步

一 环境介绍 1. 本地win10 2. Linux (centos7.4) 注&#xff1a;因为运营商方面禁止smb协议&#xff0c;导致无法在云服务器上使用smb&#xff0c;如果不是在虚拟机上操作&#xff0c;而是在云服务器上操作&#xff0c;建议还是使用 filezillaxshell组合 或者 使用finalshell等…

A5-1和DES两个加密算法的学习

A5-1加密算法 1、基本原理 A5-1加密算法是一种流password&#xff0c;通过密钥流对明文进行加密。然后用密钥流进行对密文的解密操作。 这样的算法主要用于GSM加密。也就是我们平时打电话的时候。通信数据发送到基站&#xff0c;基站发送到还有一个基站&#xff0c;基站发送到接…

从0到1简易区块链开发手册V0.3-数据持久化与创世区块

Author: brucefeng Email: brucefengbrucefeng.com 编程语言:Golang 1.BoltDB简介 Bolt是一个纯粹Key/Value模型的程序。该项目的目标是为不需要完整数据库服务器&#xff08;如Postgres或MySQL&#xff09;的项目提供一个简单&#xff0c;快速&#xff0c;可靠的数据库。 Bolt…

ELK之elasticsearch5.6的安装和head插件的安装

这里选择的elasticsearch为5.6的新版本&#xff0c;根据官方文档有几种暗装方式&#xff1a; https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html 这里选择rpm包安装https://www.elastic.co/guide/en/elasticsearch/reference/curre…

Nginx 基础(一)

一 、Nginx简述 Nginx是一个开源、高性能、可靠的HTTP中间件、代理服务。二 、常见的HTTP服务 1. HTTPD-Apache基金会 2. IIS-微软 3. GWS-Google 4. Nginx三、为什么选择Nginx 原因一&#xff1a;IO多路复用epoll &#xff08;主要解决了并发性的问题&#xff09; 注1&#xf…