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.Input; 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 Windows.ApplicationModel.Core; using Windows.System; using Windows.UI.Core; using static System.Collections.Specialized.BitVector32; using static IniHelper; 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; /// /// 代码表碎片 /// 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 // 注册 KeyDown 事件处理程序 } 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(); //section.Clear(); //valueList.Clear(); } 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) { //gj.sc("AutoSuggestBox_SuggestionChosen "+sender); //if (args.SelectedItem is not Search_List str) { return; } //search.Text = str.key; //List itemsSource = new(); //foreach (var item in valueList) //{ // if (item.code.Contains(str.key) || item.translate.Contains(str.value)) // { // itemsSource.Add(item); // } //} //valueListView.ItemsSource=itemsSource; //valueListView.ItemsSource=search.ItemsSource; } class Search_List { public string key { get; set; } public string value { get; set; } } 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.ToString(); if (valueListView.ItemsSource is not List itemsSource) { return; } var i = 0; foreach (var cat in itemsSource) { if (cat.code.Contains(splitText) || cat.translate.Contains(splitText)) { suitableItems.Add(new Search_List { key=cat.code,value=cat.translate }); } //限制搜索的最大显示 if (++i > 30) { break; } } sender.ItemsSource = suitableItems; } } private void search_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) { List itemsSource = new(); foreach (var item in valueList) { if (item.code.Contains(sender.Text) || item.translate.Contains(sender.Text)) { itemsSource.Add(item); } } valueListView.ItemsSource = itemsSource; } private void searchBox_KeyDown(object sender, KeyRoutedEventArgs e) { // 检查是否按下了 Ctrl 键 var isCtrlPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control) == CoreVirtualKeyStates.Down; // 检查是否按下了 J 键 if (e.Key == VirtualKey.J && isCtrlPressed) { // 在这里执行当 Ctrl+J 被按下时的操作 var a = search.ItemsSource as List; search.ItemsSource = null; search.ItemsSource = a; //Debug.WriteLine("Ctrl+J pressed "+ a?.Count); } } }