WPF实现下拉框带图文和水印

WPF开发者QQ群: 340500857 

有小伙伴需要实现ComboBox下拉框带水印,并且选择Item内容后水印默认从中间到顶部。Item需要展示图文,选择后的数据展示图文。

欢迎转发、分享、点赞,谢谢大家~。

效果如下:

一、Xaml代码如下

 <Window.Resources><Style TargetType="ToggleButton" x:Key="ComboxStyleBtn"><Setter Property="Template"><Setter.Value><ControlTemplate><Border x:Name="Back" Background="Transparent"><Path Name="PathFill" Fill="Black"  Width="10" Height="6" StrokeThickness="0" Data="M5,0 L10,10 L0,10 z" RenderTransformOrigin="0.5,0.5" Stretch="Fill"><Path.RenderTransform><TransformGroup><ScaleTransform/><SkewTransform/><RotateTransform Angle="180"/><TranslateTransform/></TransformGroup></Path.RenderTransform></Path></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="PathFill" Property="Fill" Value="gray"></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style><Style TargetType="ComboBox" x:Key="ComboBoxStyle"><Setter Property="ItemContainerStyle"><Setter.Value><Style TargetType="ComboBoxItem"><Setter Property="MinHeight" Value="22"></Setter><Setter Property="MinWidth" Value="60"></Setter><Setter Property="Foreground" Value="Black"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ComboBoxItem"><Border Name="Back" Background="White"  BorderThickness="0,0,0,0" BorderBrush="#81D779" ><ContentPresenter ContentSource="{Binding Source}" VerticalAlignment="Center" HorizontalAlignment="Left"></ContentPresenter></Border><ControlTemplate.Triggers><Trigger Property="IsHighlighted" Value="True"><Setter TargetName="Back" Property="Background" Value="Pink"></Setter></Trigger><Trigger Property="IsSelected" Value="True"><Setter Property="Background" Value="Red" /></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="AliceBlue" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style></Setter.Value></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ComboBox"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="0.7*"/><ColumnDefinition Width="0.3*" MaxWidth="30"/></Grid.ColumnDefinitions><TextBlock x:Name="_watermark" Text="已选择emoji"  Margin="60,6,0,0" Foreground="Gray" Grid.Column="0" VerticalAlignment="Top"></TextBlock><ContentPresenter Grid.Column="0"ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" Content="{TemplateBinding SelectionBoxItem}"VerticalAlignment="Center" Margin="2,10,0,0"></ContentPresenter><Border Grid.ColumnSpan="2" BorderBrush="#abadb3"  BorderThickness="1"/><ToggleButton Grid.Column="1" Style="{StaticResource ComboxStyleBtn}" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"></ToggleButton><Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide" ><Border CornerRadius="1" BorderBrush="#5A5A5A" BorderThickness="1,0,1,1" Background="White" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True"><Border.Effect><DropShadowEffect Color="Gray" BlurRadius="2" ShadowDepth="0" Opacity="1"/></Border.Effect><ScrollViewer Margin="0,0,0,0"  SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"><VirtualizingStackPanel  IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"  /></ScrollViewer></Border></Popup></Grid><ControlTemplate.Triggers><Trigger Property="Text" Value="{x:Null}"><Setter TargetName="_watermark" Property="VerticalAlignment" Value="Center"/><Setter TargetName="_watermark" Property="Margin" Value="10,0,0,0"/><Setter TargetName="_watermark" Property="Text" Value="请选择emoji"/></Trigger><Trigger Property="Text" Value=""><Setter TargetName="_watermark" Property="VerticalAlignment" Value="Center"/><Setter TargetName="_watermark" Property="Margin" Value="10,0,0,0"/><Setter TargetName="_watermark" Property="Text" Value="请选择emoji"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><DataTemplate x:Key="comboBoxItemDataTemplate"><WrapPanel><Image Source="{Binding ImagesPath}" Width="60" Height="60"/><TextBlock Text="{Binding Text}" VerticalAlignment="Center" Padding="4,0"/></WrapPanel></DataTemplate></Window.Resources><Grid><ComboBox Name="comboBoxArray"Width="200"Height="100"Style="{StaticResource  ComboBoxStyle}" ItemTemplate="{StaticResource comboBoxItemDataTemplate}"></ComboBox></Grid>

二、Xaml.cs代码如下

public partial class MainWindow : Window{public MainWindow(){InitializeComponent();var array = new List<ItemModel>();for (int i = 0; i < 11; i++){array.Add(new ItemModel { ImagesPath = new BitmapImage(new Uri(string.Format("pack://application:,,,/WpfComboBox;component/Images/{0}.png", i.ToString()))), Text = "Item" + i.ToString() });}this.comboBoxArray.ItemsSource = array;}}public class ItemModel{public ImageSource ImagesPath { get; set; }public string Text { get; set; }}

源码地址QQ群->“文件”->“开源项目”->" 【水印+图文】WpfComboBox.rar“

WPF开发者QQ群: 340500857 

blogs: https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出处:https://www.cnblogs.com/yanjinhua

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请著名作者 出处 https://github.com/yanjinhuagood

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

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

相关文章

linux 7.0查看防火墙状态,centos7查看防火墙状态

查看防火墙状态[rootVM_0_3_centos /]# firewall-cmd --statenot running[rootVM_0_3_centos /]# sudo systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor …

Google第一女神李飞飞,从洗碗工蜕变成为首席科学家

全世界有3.14 % 的人已经关注了数据与算法之美最近这几天&#xff0c;5岁孩子简历事件刷爆了朋友圈。批阅完朋友圈的文章&#xff0c;超模君心好累。别人家的孩子5岁已经每周3篇英语日记&#xff0c;而5岁我却还在玩泥巴&#xff0c;终于明白什么叫输在起跑线上了。即便输在了起…

如何注册java程序为windows服务

最近想找个软件来控制电脑的关机时间&#xff0c;在网上找了几个&#xff0c;都是可视化界面的可以设置具体的关机时间的软件。由于我想编写的关机程序是运行在别人机器上&#xff0c;只能让该机器在晚上17 点到23 点25 分才上网&#xff0c;到了23 点25 分就可以自动关机。为了…

通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权...

Oauth2授权&#xff0c;熟悉微信开发的同学对这个东西应该不陌生吧。当我们的应用系统需要集成第三方授权时一般都会做oauth集成&#xff0c;今天就来看看在Dapr的语境下我们如何仅通过配置无需修改应用程序的方式让第三方服务保护我们的API应用。目录&#xff1a;一、通过Dapr…

linux创建备用管理员,sql server 创建备用管理员和只读用户

-----------------------------------------------------------------------创建新的登录名use mastergoexec sp_addlogin loginame mysa , passwd 11goexec sp_addlogin loginame read , passwd 11go--修改密码--exec sp_password old null , new sa , loginame sa--exec…

宝宝学数学的第一套书,秒杀题海战术!上小学前应该这样学数学!

作为一个小学口心算特好、初高中也特别好的学霸。小木一直很关心孩子们的数学问题。我一直都在探索如何引领孩子走进数学的大门&#xff0c;启发他学数学的兴趣&#xff0c;以及把数学思维应用到生活中&#xff0c;而不仅仅是学会背数、四则运算、乘法口诀。孩子大多在3、4岁开…

使用 Azure Container Registry 储存镜像

Azure Container Registry&#xff08;容器注册表&#xff09;是基于 Docker Registry 2.0规范的托管专用 Docker 注册表服务。可以创建和维护 Azure 容器注册表来存储与管理专用的 Docker 容器映像和相关项目。Azure Container Registry 类似与阿里云的容器镜像服务。提供镜像…

在Android应用中使用Pull解析XML文件(传智播客视频笔记)

Service.java源码&#xff1a; package com.sinaapp.ssun.service; import java.io.InputStream; import java.io.OutputStream; import java.util.*; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer…

linux级别3怎么配置DNS,Linux下DNS服务器配置详解

6)辅助区域的文件基本和主区域的配置一样&#xff0c;就是不再需要在options块中加allow-transfer {}&#xff1b;&#xff0c;编辑named.rfc1912.zones文件&#xff0c;如下图进行添加&#xff1a;一定要将默认的"allow-update {none;}; "项&#xff0c;即将允许更新…

入门机器学习,这一步必不可少!

AI这个词相信大家都非常熟悉&#xff0c;近几年来人工智能圈子格外热闹&#xff0c;光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。在机器学习领域&#xff0c;Python已经成为了主流。一方面因为这门语言简单易上手&#x…

有趣的时钟

网址&#xff1a; http://chabudai.org/blog/?p59 转载于:https://blog.51cto.com/zhengchangbai/883557

.NET 中的 Worker Service 入门介绍

翻译自 Steve Gordon 2020年3月30日的文章 《WHAT ARE .NET WORKER SERVICES?》 [1]随着 .NET Core 3.0 的发布&#xff0c;ASP.NET 团队引入了一个新的 Worker Service 项目模板&#xff0c;该模板作为 .NET SDK 的一部分发布。在本文中&#xff0c;我将向您介绍这个新模板&a…

linux实验目的能学会什么意思,Linux实验.doc

Linux实验实验一&#xff1a;Linux系统的安装时间&#xff1a;一、实验目的1&#xff0e;了解Linux操作系统的内核版本和发行版本&#xff1b;2&#xff0e;掌握Fedora、RedHat操作系统的安装方法。二、实验内容和步骤&#xff1a;见教材第二章及相应课件。三、参考内容CD-ROM引…

为什么前后端分离了,你比从前更痛苦?

你有没有遇到过&#xff1a;前端代码刚写完&#xff0c;后端的接口又变了。接口文档永远都是不对的。测试工作永远只能临近上线才能开始。为什么前后端分离了&#xff0c;你比从前更痛苦&#xff1f;前后端分离早已经不是新闻&#xff0c;当真正分离之后确遇到了更多问题。要想…

响应式设计(Response Web Design)浅谈

响应式Web设计&#xff0c;这个话题可能是当下Web设计领域里讨论和应用比较多的话题了&#xff0c;为什么要响应式Web设计?什么是响应式Web设计? Web发展迅速&#xff0c;各种应用和服务层出不穷&#xff0c;现在打开电脑&#xff0c;可能使用最多的程序应该是浏览器了&#…

C# this关键字的3种用法

用法一 this代表当前类的实例对象namespace Demo {public class Test{private string scope "全局变量";public string getResult(){string scope "局部变量";// this代表Test的实例对象// 所以this.scope对应的是全局变量// scope对应的是getResult方法…

c语言哈密顿路径算法,用于检查给定图中是否存在哈密顿循环或路径的C ++程序...

哈密顿循环是哈密顿路径&#xff0c;因此从哈密顿路径的最后一个顶点到第一个顶点有一条边(在图中)。它在无向图中是一条路径&#xff0c;该路径恰好访问该图的每个顶点一次。功能和目的&#xff1a;Begin1.function isSafe() is used to check for whether it is adjacent to …

现在6岁的小朋友都开始学编程了……

前段时间&#xff0c;朋友跟小木说&#xff1a;现在的小孩什么都要学&#xff0c;以后是不是都要学编程了&#xff1f;小木鄙夷地笑了一下&#xff1a;他们已经学编程了啊&#xff01;朋友表情↓↓↓朋友&#xff1a;纳尼&#xff1f;&#xff1f;&#xff1f;我到大学才接触编…

操作分布式文件之三:如何访问和操作远程文件

FttpAdapter fa new FttpAdapter("fttp://10.232.20.151/home/qianfeng.py/fttp/tmp/1.log"); 上面实例化一个FttpAdapter类&#xff0c;并输入一个fttp路径&#xff0c;可以是一个目录路径&#xff0c;也可以是个文件路径 FttpAdapter类提供了一系列访问远程文件的…

记一次 .NET 医院CIS系统 内存溢出分析

一&#xff1a;背景 1. 讲故事前几天有位朋友加wx求助说他的程序最近总是出现内存溢出&#xff0c;很崩溃&#xff0c;如下图&#xff1a;和这位朋友聊下来&#xff0c;发现他也是搞医疗的&#xff0c;哈哈&#xff0c;.NET 在医疗方面还是很有市场的????????????&…