You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.7 KiB
109 lines
3.7 KiB
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
|
|
{
|
|
/// <summary>
|
|
/// TirePressurePage.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class TirePressurePage : UserControl
|
|
{
|
|
public TirePressurePage()
|
|
{
|
|
InitializeComponent();
|
|
DataContext=Ioc.Default.GetService<TirePressureViewModel>();
|
|
}
|
|
// 全局单选:记录当前选中项
|
|
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<Expander>(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<T> FindVisualChildren<T>(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<T>(child)) yield return c;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|