using AIK.ViewModels.TirePressure; using CommunityToolkit.Mvvm.DependencyInjection; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace AIK.Views.MenuPages.TirePressure { /// /// TirePressurePage.xaml 的交互逻辑 /// public partial class TirePressurePage : UserControl { public TirePressurePage() { InitializeComponent(); DataContext=Ioc.Default.GetService(); } // 全局单选:记录当前选中项 private object _lastSelectedItem; // 子项点击 = 全局单选 private void ItemBorder_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { var border = sender as Border; if (border == null) return; var clickedItem = border.Tag; // 1. 取消上一个选中 if (_lastSelectedItem is INotifyPropertyChanged oldItem) { var prop = oldItem.GetType().GetProperty("IsSelected"); prop?.SetValue(oldItem, false); } // 2. 设置当前选中 if (clickedItem is INotifyPropertyChanged newItem) { var prop = newItem.GetType().GetProperty("IsSelected"); prop?.SetValue(newItem, true); _lastSelectedItem = clickedItem; } } // 手风琴效果 private void Expander_Expanded(object sender, RoutedEventArgs e) { if (sender is Expander currentExpander) { var parent = VisualTreeHelper.GetParent(currentExpander); while (parent != null && parent is not ListBox) parent = VisualTreeHelper.GetParent(parent); if (parent is ListBox listBox) { foreach (var item in listBox.Items) { if (listBox.ItemContainerGenerator.ContainerFromItem(item) is ListBoxItem lbi) { foreach (var exp in FindVisualChildren(lbi)) { if (exp != currentExpander) exp.IsExpanded = false; } } } } } } // 滚动穿透 private void CarListBox_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { if (!e.Handled) { e.Handled = true; var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta); eventArg.RoutedEvent = MouseWheelEvent; eventArg.Source = sender; var parent = ((Control)sender).Parent as UIElement; parent.RaiseEvent(eventArg); } } // 查找控件 private static IEnumerable FindVisualChildren(DependencyObject depObj) where T : DependencyObject { if (depObj == null) yield break; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) { var child = VisualTreeHelper.GetChild(depObj, i); if (child is T t) yield return t; foreach (var c in FindVisualChildren(child)) yield return c; } } } }