using HandyControl.Data; using System; using System.Collections.Generic; 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; using HandyControl.Tools; using HandyControl.Tools.Extension; using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging.Messages; using CommunityToolkit.Mvvm.ComponentModel; using System.Reflection; using System.Diagnostics.Eventing.Reader; using System.Windows.Forms; namespace LiveTools.Content { /// /// MainContent.xaml 的交互逻辑 /// public partial class MainContent { public MainContent() { InitializeComponent(); WeakReferenceMessenger.Default.Register(this, OnReceive); } /// /// /// public object SubContent { get;set; } private rySafe.UsingLock ui_lock=new rySafe.UsingLock(); private List list_ui = new List(); public System.Windows.Controls.UserControl GetUI(Type type) { using (ui_lock.Write()) { var find = list_ui.FindIndex(x => x.GetType() == type); if (find == -1) { var ctl = (System.Windows.Controls.UserControl)Activator.CreateInstance(type); list_ui.Add(ctl); return ctl; } else { return list_ui[find]; } } } private void OnReceive(object recipient, string message) { if (SubContent is IDisposable disposable) { disposable.Dispose(); } switch (message) { case "login": if (Config.IsLogin() == 1) { SubContent = GetUI(typeof(FrmAccountInfo)); } else { SubContent = GetUI(typeof(FrmLogin)); } break; case "home": SubContent = GetUI(typeof(FrmAccountInfo)); break; case "rules": SubContent = GetUI(typeof(FrmRuleView)); break; case "direct": SubContent = GetUI(typeof(FrmDirectView)); break; case "setting": SubContent = GetUI(typeof(FrmSetting)); break; } PresenterMain.Content= SubContent; } } }