using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Timers; 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 VPet_Simulator.Core { /// /// MessageBar.xaml 的交互逻辑 /// public partial class MessageBar : UserControl { public MessageBar() { InitializeComponent(); EndTimer.Elapsed += EndTimer_Elapsed; ShowTimer.Elapsed += ShowTimer_Elapsed; CloseTimer.Elapsed += CloseTimer_Elapsed; } private void CloseTimer_Elapsed(object sender, ElapsedEventArgs e) { if (Dispatcher.Invoke(() => Opacity) <= 0.05) { Dispatcher.Invoke(() => this.Visibility = Visibility.Collapsed); EndAction?.Invoke(); }else { Dispatcher.Invoke(() => Opacity -= 0.02); } } List outputtext; private void ShowTimer_Elapsed(object sender, ElapsedEventArgs e) { if (outputtext.Count > 0) { Dispatcher.Invoke(() => { TText.Text += outputtext[0]; outputtext.RemoveAt(0); }); } else { ShowTimer.Stop(); EndTimer.Start(); } } public Action EndAction; private void EndTimer_Elapsed(object sender, ElapsedEventArgs e) { if (--timeleft <= 0) { EndTimer.Stop(); CloseTimer.Start(); } } public Timer EndTimer = new Timer() { Interval = 100 }; public Timer ShowTimer = new Timer() { Interval = 20 }; public Timer CloseTimer = new Timer() { Interval = 10 }; int timeleft; public void Show(string name, string text) { TText.Text = ""; outputtext = text.ToList(); LName.Content = name; timeleft = text.Length + 5; ShowTimer.Start(); EndTimer.Stop(); CloseTimer.Stop(); this.Visibility = Visibility.Visible; Opacity = 1; } private void Border_MouseEnter(object sender, MouseEventArgs e) { EndTimer.Stop(); CloseTimer.Stop(); this.Opacity = 1; } private void Border_MouseLeave(object sender, MouseEventArgs e) { if (!ShowTimer.Enabled) EndTimer.Start(); } private void UserControl_MouseDoubleClick(object sender, MouseButtonEventArgs e) { EndTimer.Stop(); ShowTimer.Stop();CloseTimer.Close(); this.Visibility = Visibility.Collapsed; EndAction?.Invoke(); } } }