| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using Microsoft.Xaml.Behaviors;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Input;
- namespace TeamAAS_VP.Behaviors
- {
- public class ComboBoxSelectionBehavior : Behavior<ComboBox>
- {
- // 定义一个依赖属性,用于绑定命令
- public static readonly DependencyProperty UserSelectionCommandProperty =
- DependencyProperty.Register(
- nameof(UserSelectionCommand),
- typeof(ICommand),
- typeof(ComboBoxSelectionBehavior));
- public ICommand UserSelectionCommand
- {
- get => (ICommand)GetValue(UserSelectionCommandProperty);
- set => SetValue(UserSelectionCommandProperty, value);
- }
- // 定义 CommandParameter 依赖属性
- public static readonly DependencyProperty CommandParameterProperty =
- DependencyProperty.Register(
- nameof(CommandParameter),
- typeof(object),
- typeof(ComboBoxSelectionBehavior));
- public object CommandParameter
- {
- get => GetValue(CommandParameterProperty);
- set => SetValue(CommandParameterProperty, value);
- }
- protected override void OnAttached()
- {
- base.OnAttached();
- AssociatedObject.SelectionChanged += OnSelectionChanged;
- AssociatedObject.PreviewMouseDown += OnPreviewMouseDown;
- AssociatedObject.PreviewMouseWheel += OnPreviewMouseWheel;// 处理鼠标滚轮事件
- }
- protected override void OnDetaching()
- {
- base.OnDetaching();
- AssociatedObject.SelectionChanged -= OnSelectionChanged;
- AssociatedObject.PreviewMouseDown -= OnPreviewMouseDown;
- AssociatedObject.PreviewMouseWheel -= OnPreviewMouseWheel; // 处理鼠标滚轮事件
- }
- private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
- {
- if (sender is ComboBox comboBox)
- {
- if (!comboBox.IsDropDownOpen)
- {
- // 吞掉滚轮事件,禁止它改变选项
- e.Handled = true;
- }
- }
- }
- private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
- {
-
- }
- private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (sender is ComboBox comboBox && comboBox.IsDropDownOpen)
- {
- if (UserSelectionCommand?.CanExecute(CommandParameter) == true)
- {
- // 用户手动选择
- var selectedItem = AssociatedObject.SelectedItem;
- var parameter = new Tuple<object, object>(CommandParameter, comboBox.SelectedItem);
- UserSelectionCommand.Execute(parameter);
- }
- }
- }
- }
- }
|