alielie
2025-11-21 3a471ae651b228231bebb3a2d438baa1d4ac0261
HMI.UI/Controls/MultiCombox.xaml.cs
@@ -1,5 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
@@ -53,6 +52,11 @@
        private void MultiComboBoxItem_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            if (e.OriginalSource is CheckBox)
            {
                // 从CheckBox点击传过来的事件要拉回焦点,不然会卡在Popup层当前的Item上
                this.Focus();
            }
            if (DataContext is MultiComboBoxData data)
            {
                data.IsChecked = !data.IsChecked;
@@ -64,17 +68,17 @@
        {
            if (e.OldValue != null && e.OldValue is MultiComboBoxData oldData)
            {
                oldData.IsCheckedChanged -= DataIsExpandedChange;
                oldData.IsCheckedChanged -= DataIsCheckedChangedChange;
            }
            if (DataContext != null && DataContext is MultiComboBoxData newData)
            {
                newData.IsCheckedChanged += DataIsExpandedChange;
                newData.IsCheckedChanged += DataIsCheckedChangedChange;
            }
        }
        private void DataIsExpandedChange(object sender, bool IsExpanded)
        private void DataIsCheckedChangedChange(object sender, bool isChecked)
        {
            parent.Item_IsCheckedChanged((MultiComboBoxData)sender, this, IsExpanded);
            parent.Item_IsCheckedChanged((MultiComboBoxData)sender, this, isChecked);
        }
    }
@@ -151,6 +155,8 @@
    /// </summary>
    public partial class MultiComboBox : ComboBox
    {
        public static readonly string[] splits = new string[] { ", " };
        protected override DependencyObject GetContainerForItemOverride()
        {
            var item = new MultiComboBoxItem(this);
@@ -182,8 +188,10 @@
        {
            var selectedValues = SelectedValues?.ToString() ?? "";
            var showNames = this.Text?.ToString() ?? "";
            List<string> values = string.IsNullOrEmpty(selectedValues) ? new List<string>() : selectedValues.Split(',').ToList();
            List<string> names = string.IsNullOrEmpty(showNames) ? new List<string>() : showNames.Split(',').ToList();
            List<string> values = string.IsNullOrEmpty(selectedValues) ? new List<string>() :
                selectedValues.Split(splits, StringSplitOptions.RemoveEmptyEntries).ToList();
            List<string> names = string.IsNullOrEmpty(showNames) ? new List<string>() :
                showNames.Split(splits, StringSplitOptions.RemoveEmptyEntries).ToList();
            if (isChecked)
            {
                values.Add(data.DataValue);
@@ -194,8 +202,8 @@
                values.Remove(data.DataValue);
                names.Remove(data.DisplayName);
            }
            Text = string.Join(",", names);
            SelectedValues = string.Join(",", values);
            Text = string.Join(", ", names);
            SelectedValues = string.Join(", ", values);
        }
    }
}