using System; using System.Collections.Specialized; using System.Windows; using System.Windows.Controls; using System.Windows.Media; #nullable enable namespace BililiveRecorder.WPF.Controls { /// /// Interaction logic for LogPanel.xaml /// public partial class LogPanel : UserControl { public LogPanel() { this.InitializeComponent(); ((INotifyCollectionChanged)this.logView.Items).CollectionChanged += this.LogView_CollectionChanged; } private void LogView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { try { if (!this.logView.IsMouseOver && VisualTreeHelper.GetChildrenCount(this.logView) > 0) { var border = (Border)VisualTreeHelper.GetChild(this.logView, 0); var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0); scrollViewer.ScrollToBottom(); } } catch (Exception) { } } private static readonly TimeSpan OneSecond = TimeSpan.FromSeconds(1); private DateTimeOffset lastSizeChanged = DateTimeOffset.MinValue; private void ListView_SizeChanged(object sender, SizeChangedEventArgs e) { try { if (sender is not ListView listView) return; if (listView.View is not GridView view) return; var now = DateTimeOffset.Now; if (now - this.lastSizeChanged < OneSecond) return; this.lastSizeChanged = now; var w = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth - 105 - 60 - 105; view.Columns[0].Width = 105; view.Columns[1].Width = 60; view.Columns[2].Width = 105; view.Columns[3].Width = w; } catch (Exception) { } } } }