示例#1
0
        private static void StartEditing(ListView list, ListViewItem item, DocumentGroup group, Action <TextBox, bool> endEditingFn)
        {
            var edit = item.FindDescendant <TextBox>();

            var visibility = Observable.FromEventPattern <DependencyPropertyChangedEventArgs>(edit, "IsVisibleChanged");

            var disposables = new CompositeDisposable();

            visibility.Where(re => re.EventArgs.NewValue as bool? == false)
            .Take(1)
            .Subscribe(re => disposables.Dispose());

            visibility.Where(ivc => ivc.EventArgs.NewValue as bool? == true)
            .Take(1)
            .Subscribe(re =>
            {
                edit.SelectionStart  = 0;
                edit.SelectionLength = edit.Text.Length;
                edit.Focus();
            });

            disposables.Add(Observable.FromEventPattern <RoutedEventArgs>(edit, "LostFocus")
                            .Take(1)
                            .Subscribe(re => endEditingFn(edit, false)));

            disposables.Add(Observable.FromEventPattern <KeyEventArgs>(edit, "PreviewKeyUp")
                            .Where(re => re.EventArgs.Key == Key.Escape || re.EventArgs.Key == Key.Enter)
                            .Take(1)
                            .Subscribe(re =>
            {
                re.EventArgs.Handled = true;
                endEditingFn(edit, re.EventArgs.Key == Key.Escape);
            }));

            disposables.Add(Observable.FromEventPattern <MouseEventArgs>(list, "MouseLeftButtonDown")
                            .Take(1)
                            .Subscribe(re => endEditingFn(edit, false)));

            group.StartEditing();
        }