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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

使用 Azure Container Registry 储存镜像

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

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…

.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…

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

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

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

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

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

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

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

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

丘成桐:完全不懂数学,才会有“数学无用”的说法

全世界有3.14 % 的人已经关注了数据与算法之美▲中国科学院院长白春礼&#xff08;右&#xff09;与数学家丘成桐&#xff08;左&#xff09;为晨兴数学金奖获得者李思&#xff08;中&#xff09;颁奖培养第一流的学生&#xff0c;首先要有对于学问的兴趣&#xff0c;而非奔着考…

动手实现一个适用于.NET Core 的诊断工具

前言大家可能对诊断工具并不陌生&#xff0c;从大名鼎鼎的 dotTrace&#xff0c;到 .NET CLI 推出的一系列的高效诊断组件&#xff08;dotnet trace,dotnet sos,dotnet dump&#xff09;等, 这些工具提升了对程序Debug的能力和效率&#xff0c;可以让开发人员从更高层次的维度来…

android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...

强制下线功能算是比较常见的了&#xff0c;很多的应用程序都具备这个功能&#xff0c;比如你的QQ号在别处登录了&#xff0c;就会将你强制挤下线。实现强制下线功能的思路比较简单&#xff0c;只需要在界面上弹出一个对话框&#xff0c;让用户无法进行任何操作&#xff0c;必须…

USB权限的设置

USB设备给我们日常生活中带了很多的方便&#xff0c;能够在不同的不同的移动设备中传递数据。但也给我们的数据安全带来了隐患&#xff0c;它可以拷贝走我们计算机中很机密的信息&#xff01;通过下面的操作后&#xff0c;将使我们有用的信息增加更大安全性&#xff0c;至小也能…

漫谈高数——泰勒级数的物理意义

全世界有3.14 % 的人已经关注了数据与算法之美高等数学干吗要研宄级数问题&#xff1f;是为了把简单的问题弄复杂来表明自己的高深&#xff1f; No,是为了把各种简单的问题/复杂的问题&#xff0c;他们的求解过程用一种通用的方法来表示。提一个问题&#xff0c;99*99等于多少&…

保持学习,从这几个公众号开始!

全世界有3.14 % 的人已经关注了数据与算法之美关注了几百个公众号无目的的看文章却如鸡肋一般食之无味弃之可惜你是否也觉得时间被浪费&#xff1f;生命被辜负了&#xff1f;点击关注下面几个公众号它们每天更新有态度、有温度的原创文字每一篇推文都值得你点开长按二维码&…

回顾 | 在 GitHub 上贡献到开源项目

点击蓝字关注我们精彩回顾GitHub 是世界上最大的开源社区&#xff0c;拥有数百万个开源项目。GitHub 的优势之一是在项目上进行协作非常容易。在本研讨会中&#xff0c;我们将介绍在 GitHub 上找到开源项目并为其做出贡献的难易程度。我们将向您展示如何创建拉取请求&#xff0…

html assign无效,Object.assign的一些用法

Object.assign的一些用法2020/11/12 20:19:03  字体&#xff1a;大 中 小 浏览 1289 我要评论需要定制网站程序、公众号程序、微信小程序可以联系&#xff1a;565449214或者加微信13961347334(备注&#xff1a;需要技术)或者在处理一些技术问题时&#xff0c;有什么不懂的地…

R语言和 Python —— 一个错误的分裂

全世界有3.14 % 的人已经关注了数据与算法之美最近有一些文章提出与年龄相关的问题&#xff1a;“崭露头角的年轻数据科学家们是学习R语言还是Python更好?”答案似乎都是“视情况而定”&#xff0c;在现实中没有必要在R和Python中做出选择&#xff0c;因为你两个都用得到。推荐…