using AIK.ViewModels; using AIK.ViewModels.CommonViewModel; using AIK.ViewModels.RemoteGeneration; 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.RemoteGeneration { /// /// RemoteGenerationPage.xaml 的交互逻辑 /// public partial class RemoteGenerationPage : UserControl { public IReadOnlyList LetterIndexes { get; } = Enumerable.Range('A', 26).Select(c => ((char)c).ToString()).ToArray(); public RemoteGenerationPage() { InitializeComponent(); //if (!IsInDesignMode()) //{ // DataContext = Ioc.Default.GetService(); //} DataContext = Ioc.Default.GetService(); } private static bool IsInDesignMode() { return DesignerProperties.GetIsInDesignMode(new DependencyObject()); } private void LetterIndexButton_Click(object sender, RoutedEventArgs e) { if (sender is not Button button || button.Content is not string letter) { return; } var groupContainer = FindVisualChildren(BrandGroupsList) .FirstOrDefault(element => string.Equals(element.Tag as string, letter, StringComparison.OrdinalIgnoreCase)); if (groupContainer == null) { return; } ScrollGroupToTop(groupContainer); } private void ScrollGroupToTop(FrameworkElement groupContainer) { if (!groupContainer.IsLoaded) { return; } var groupPosition = groupContainer.TransformToAncestor(scrList).Transform(new Point(0, 0)); var targetOffset = scrList.VerticalOffset + groupPosition.Y; scrList.ScrollToVerticalOffset(Math.Max(0, targetOffset)); } private static IEnumerable FindVisualChildren(DependencyObject parent) where T : DependencyObject { if (parent == null) { yield break; } var childCount = VisualTreeHelper.GetChildrenCount(parent); for (var index = 0; index < childCount; index++) { var child = VisualTreeHelper.GetChild(parent, index); if (child is T typedChild) { yield return typedChild; } foreach (var descendant in FindVisualChildren(child)) { yield return descendant; } } } } }