using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Diagnostics.Metrics; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using System.Text.Json.Serialization; using System.Text.RegularExpressions; using System.Xml.Linq; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Data; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Navigation; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using RustTools.DataList; using RustTools.muqing; using RustTools.ViewModels; using static System.Collections.Specialized.BitVector32; using static RustTools.DataList.DataBaseManifest; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. namespace RustTools.Views; /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class CodeTablePage : Page { public ObservableCollection? codeList = new(); public CodeTableViewModel ViewModel { get; set; } public List section = new(); public CodeTablePage() { ViewModel = App.GetService(); InitializeComponent(); try { var path = Path.Combine(CodeDataPage.codetable.Dir, CodeDataPage.codetable.tables.code); var codeTable_Code = JsonConvert.DeserializeObject(File.ReadAllText(path)); var v1 = File.ReadAllText(Path.Combine(CodeDataPage.codetable.Dir, CodeDataPage.codetable.tables.section)); section = JsonConvert.DeserializeObject(v1).data; //gj.sc(v1); foreach (var item in codeTable_Code.data) { #pragma warning disable SYSLIB1045 // 转换为“GeneratedRegexAttribute”。 foreach (var parts in Regex.Split(item.section, ",")) { var FirstOrDefault = codeList.FirstOrDefault(any => any.Key == parts); if (FirstOrDefault != null) { FirstOrDefault.Vaule.Add(item); } else { var sectionData = section.FirstOrDefault(any => any.code == parts); var translate = "Null"; if (sectionData != null) { translate = sectionData.translate; } sectionData = null; var codeTable1 = new CodeTable { Key = parts, CnKey = translate, Vaule = new List() }; codeTable1.Vaule.Add(item); codeList.Add(codeTable1); } } } if (codeList.Count > 0) { //var firstEntry = codeList.FirstOrDefault(); keyListView.SelectedItem = codeList.FirstOrDefault(); // 默认选中第一项 } } catch (Exception ex) { Task.Run(async () => { await Dialog.DialogWarn(ex.Message, XamlRoot); }); } //var textBlock = new TextBlock(); //textBlock.IsTextSelectionEnabled } private void keyListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 获取新选中的项 var addedItems = e.AddedItems; foreach (var item in addedItems) { Debug.WriteLine($"Selected item: {item}"); if (item is CodeTable a) { gj.sc(a); valueList = a.Vaule; valueListView.ItemsSource = a.Vaule; } // 你可以在这里进行其他操作,比如导航到另一个页面、弹出对话框等 } //// 获取移除的项 //var removedItems = e.RemovedItems; //foreach (var item in removedItems) //{ // Debug.WriteLine($"Deselected item: {item}"); //} } /// /// 退出的时候清空 防止内存泄漏 /// /// protected override void OnNavigatedFrom(NavigationEventArgs e) { base.OnNavigatedFrom(e); codeList?.Clear(); codeList = null; } private void List_ButtonIcon_Click(object sender, RoutedEventArgs e) { var button = sender as Button; if (button != null) { if (button.DataContext is not CodeTable_Data codeTable_Data) { return; } if (ToggleThemeTeachingTip1.IsOpen==false) { ToggleThemeTeachingTip1.Target = button; ToggleThemeTeachingTip1.IsOpen = true; } else { ToggleThemeTeachingTip1.IsOpen = false; } ToastTextBlock.Text =codeTable_Data.demo; gj.sc(codeTable_Data); } } private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args) { var str = args.SelectedItem.ToString(); search.Text = str; if (str == null) { return; } var a=str.Split(' '); List itemsSource = new(); foreach (var item in valueList) { if (item.code.Contains(a[0]) || item.translate.Contains(a[1])) { itemsSource.Add(item); gj.sc(item.code); } } gj.sc(itemsSource.Count); valueListView.ItemsSource=itemsSource; //valueListView.ItemsSource=search.ItemsSource; } private List valueList = new (); private void search_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { if (string.IsNullOrEmpty(search.Text)) { valueListView.ItemsSource = valueList; return; } // Since selecting an item will also change the text, // only listen to changes caused by user entering text. if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) { var suitableItems = new List(); var splitText = sender.Text.ToLower().Split(" "); if (valueListView.ItemsSource is not List itemsSource) { return; } foreach (var cat in itemsSource) { var found = splitText.All((key) => { if (string.IsNullOrEmpty(key)) { return false; } return cat.code.Contains(key)||cat.translate.Contains(key); }); if (found) { suitableItems.Add(cat.code+" "+cat.translate); } } if (suitableItems.Count == 0) { suitableItems.Add("No results found"); } sender.ItemsSource = suitableItems; } } }