using System.Windows.Input; using System.Windows; using System.Windows.Controls; using System; using System.ComponentModel; using System.Windows.Media; namespace CustomControls { [DesignTimeVisible(false)] public partial class ListView : System.Windows.Controls.ListView { public event EventHandler CancelEdit; public event EventHandler AcceptEdit; public event EventHandler FetchMoreItems; private void OnAcceptEdit() => AcceptEdit?.Invoke(this, EventArgs.Empty); private void OnCancelEdit() => CancelEdit?.Invoke(this, EventArgs.Empty); private void PART_TextBox_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { var tb = sender as TextBox; if (tb.IsVisible) { tb.Focus(); tb.SelectAll(); } } private void PART_TextBox_LostFocus(object sender, RoutedEventArgs e) { OnCancelEdit(); } private void PART_TextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Escape) { OnCancelEdit(); e.Handled = true; } else if (e.Key == Key.Enter) { OnAcceptEdit(); e.Handled = true; } } private void ListView_ScrollChanged(object sender, ScrollChangedEventArgs e) { if (e.VerticalOffset > 0 && e.ExtentHeight - e.ViewportHeight <= e.VerticalOffset) { FetchMoreItems?.Invoke(this, EventArgs.Empty); } } public ListView() { InitializeComponent(); } } }