V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanjinhua
V2EX  ›  .NET

WPF 实现多选下拉控件

  •  
  •   yanjinhua · 2023-02-02 10:31:37 +08:00 · 1596 次点击
    这是一个创建于 660 天前的主题,其中的信息可能已经有所发展或是发生改变。

    控件名:MultiSelectComboBox

    作 者:WPFDevelopersOrg - 驚鏵

    原文链接https://github.com/WPFDevelopersOrg/WPFDevelopers

    • 框架使用.NET40
    • Visual Studio 2022;
    • 创建控件 MultiSelectComboBox 继承 ListBox
      • 依赖属性 IsSelectAllActive 是否支持显示全选,默认 false
      • 依赖属性 SelectAllContent 全选控件的 Content,默认显示 全选
      • 依赖属性 Delimiter 分隔符,默认显示 ;
      • 依赖属性 Text 显示选择的所有 Item
      • 其他与ComboBox 依赖属性一致。

    1 ) MultiSelectComboBox.xaml 代码如下: Github|MultiSelectComboBox
    码云|MultiSelectComboBox
    2 ) MultiSelectComboBoxItem.cs 代码如下:

    using System.Windows.Controls;
    
    namespace WPFDevelopers.Controls
    {
        public class MultiSelectComboBoxItem : ListBoxItem
        {
        }
    }
    

    3 ) MultiSelectComboBox.xaml 代码如下: Github|MultiSelectComboBox.xaml
    码云|MultiSelectComboBox.xaml
    4 ) MultiSelectComboBoxExample.xaml 代码如下:

    <UserControl x:Class="WPFDevelopers.Samples.ExampleViews.MultiSelectComboBoxExample"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"
                 xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"
                 xmlns:controls="clr-namespace:WPFDevelopers.Samples.Controls"
                 xmlns:model="clr-namespace:WPFDevelopers.Sample.Models"
                 mc:Ignorable="d" 
                 d:DesignHeight="450" d:DesignWidth="800">
        <UserControl.Resources>
            <model:HospitalList x:Key="myHospitalList"/>
        </UserControl.Resources>
            <UniformGrid Columns="2">
                <wpfdev:MultiSelectComboBox
                    VerticalContentAlignment="Center" 
                    HorizontalAlignment="Center"
                    Delimiter="^" Width="200">
                    <wpfdev:MultiSelectComboBoxItem>Option 1</wpfdev:MultiSelectComboBoxItem>
                    <wpfdev:MultiSelectComboBoxItem>Option 2</wpfdev:MultiSelectComboBoxItem>
                    <wpfdev:MultiSelectComboBoxItem>Option 3</wpfdev:MultiSelectComboBoxItem>
                    <wpfdev:MultiSelectComboBoxItem>Option 4</wpfdev:MultiSelectComboBoxItem>
                    <wpfdev:MultiSelectComboBoxItem>Option 5</wpfdev:MultiSelectComboBoxItem>
                </wpfdev:MultiSelectComboBox>
                <wpfdev:MultiSelectComboBox VerticalContentAlignment="Center" 
                                             HorizontalAlignment="Center"
                                             IsSelectAllActive="True"
                                 ItemsSource="{Binding Source={StaticResource myHospitalList}}"
                                 DisplayMemberPath="DoctorName"
                                 SelectedValuePath="ID" Width="200">
    
                </wpfdev:MultiSelectComboBox>
            </UniformGrid>
            
    </UserControl>
    
    

    2 条回复    2023-06-02 10:29:56 +08:00
    ragnaroks
        1
    ragnaroks  
       2023-02-02 11:47:51 +08:00   ❤️ 1
    难能可贵还在坚持 WPF ,现在 dotnet 做图形界面应用程序一般都是 blazor desktop ,MVU (类 react )加点样式表实现这种东西快得很。
    yanjinhua
        2
    yanjinhua  
    OP
       2023-06-02 10:29:56 +08:00
    @ragnaroks 是的用 blazor 确实很快、个人就是比较爱好 WPF
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:22 · PVG 16:22 · LAX 00:22 · JFK 03:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.