博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox
阅读量:6340 次
发布时间:2019-06-22

本文共 2795 字,大约阅读时间需要 9 分钟。

原文:

一.前言

  申明WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接

  本文主要内容:

  • 下拉选择控件ComboBox的自定义样式及扩展;
  • 自定义多选控件MultiComboBox;

二.下拉选择控件ComboBox的自定义样式及扩展

2.1基本样式

  先看看基础效果图:

 

  从功能上ComboBox有两种状态:

    • 可编辑文本;
    • 不可编辑文本。

从XAML的逻辑树结构上看,分为几个部分:

    • 显示当前内容的区域;
    • 下拉按钮,一般使用ToggleButton;
    • 弹出的下拉选项列表,使用Popup作为容器;

样式定义代码:  

View Code

  如果看过本系列前面的文章,对上面的代码就更容易理解了,为了方便支持水印、Label标签、清除内容功能扩展,在基础样式里加了额外的部分,在xaml中有注释说明。 

2.2 Label标签样式

效果图:

在2.1的基础样式上扩展即可:  

使用示例:  

2.3 扩展清除选中项/文本按钮样式

效果图:

同样,也是在2.1的基础样式上扩展:  

  使用示例:

 

三.自定义多选控件MultiComboBox

  实际需求中,经常有多选的要求,基于ComboBox简单的实现了一个多选控件MultiComboBox。效果图:

  在功能上,可以满足基本需求,实际功能还不完整的,可以根据自己的需求完善,后台C#代码:

///     /// MultiComboBox.xaml 的交互逻辑    ///     [TemplatePart(Name = "PART_ListBox", Type = typeof(ListBox))]    public partial class MultiComboBox : ComboBox    {        ///         /// 获取选择项集合        ///         public IList SelectedItems        {            get { return this._ListBox.SelectedItems; }        }        ///         /// 设置或获取选择项        ///         public new int SelectedIndex        {            get { return this._ListBox.SelectedIndex; }            set { this._ListBox.SelectedIndex = value; }        }        private ListBox _ListBox;        public override void OnApplyTemplate()        {            base.OnApplyTemplate();            this._ListBox = Template.FindName("PART_ListBox", this) as ListBox;            this._ListBox.SelectionChanged += _ListBox_SelectionChanged;        }        void _ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)        {            StringBuilder sb = new StringBuilder();            foreach (var item in this.SelectedItems)            {                sb.Append(item.ToString()).Append(";");            }            this.Text = sb.ToString().TrimEnd(';');        }        static MultiComboBox()        {            //OverridesDefaultStyleProperty.OverrideMetadata(typeof(MultiComboBox), new FrameworkPropertyMetadata(typeof(MultiComboBox)));        }        public MultiComboBox()        {            ListBox ls = new ListBox();            //ls.SelectedItems        }        public void SelectAll()        {            this._ListBox.SelectAll();        }        public void UnselectAll()        {            this._ListBox.UnselectAll();        }    }
View Code

  样式上,也实现了同第二节一样的扩展,包括支持水印、Label标签、清除内容功能扩展,就不做具体介绍了,基础样式代码:

View Code

  使用实例:  

 

  补充:EditableTextBoxStyle及ComboToggleButton样式代码

   
View Code

 

附录:参考引用

 

版权所有,文章来源:

个人能力有限,本文内容仅供学习、探讨,欢迎指正、交流。

转载地址:http://zbroa.baihongyu.com/

你可能感兴趣的文章
No!No!No! It's not fashion!
查看>>
艰困之道中学到的经验教训
查看>>
互联网生态建设落地五大挑战——保险科技生态建设 ...
查看>>
进行短视频app开发工作时,可以加入它来保护青少年 ...
查看>>
25G DAC无源高速线缆和25G光模块之间的区别
查看>>
乐乐茶完成近2亿元Pre-A轮融资,祥峰投资领投
查看>>
clickhouse修改时区
查看>>
CSS_定位
查看>>
第二十四章:页面导航(六)
查看>>
百度、长沙加码自动驾驶,湖南阿波罗智行科技公司成立 ...
查看>>
10 个 Linux 中方便的 Bash 别名
查看>>
全新 DOCKER PALS 计划上线,带给您不一样的参会体验! ...
查看>>
Android开发之自定义View(二)
查看>>
python爬虫之微打赏(scrapy版)
查看>>
自制操作系统Antz day08——实现内核 (中) 扩展内核
查看>>
poj-1056-IMMEDIATE DECODABILITY(字典)
查看>>
区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
查看>>
小程序爆红 专家:对简单APP是巨大打击
查看>>
FarBox--另类有趣的网站服务【转】
查看>>
在非纯色背景上,叠加背景透明的BUTTON和STATIC_TEXT控件
查看>>