兼容win7版应用
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

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;
}
}
}
}