@@ -101,6 +101,8 @@ public partial class EditTextWindow : Wpf.Ui.Controls.FluentWindow
101101 private readonly DataTable spreadsheetTable = new ( ) ;
102102 private readonly List < DataGridColumn > trackedSpreadsheetColumns = [ ] ;
103103 private List < ( int RowIndex , int ColumnIndex ) > selectedSpreadsheetCellCoordinates = [ ] ;
104+ private System . Windows . Controls . TextBox ? activeSpreadsheetCellEditor ;
105+ private string lastSpreadsheetCellEditorSelectedText = string . Empty ;
104106 private EtwEditorMode editorMode = EtwEditorMode . Text ;
105107 private SpellCheckMode spellCheckMode = SpellCheckMode . Auto ;
106108 private bool isSyncingTextFromSpreadsheet = false ;
@@ -1097,6 +1099,8 @@ private void SpreadsheetDataGrid_BeginningEdit(object sender, DataGridBeginningE
10971099
10981100 private void SpreadsheetDataGrid_CellEditEnding ( object sender , DataGridCellEditEndingEventArgs e )
10991101 {
1102+ DetachSpreadsheetCellEditor ( ) ;
1103+
11001104 if ( e . EditAction == DataGridEditAction . Cancel )
11011105 {
11021106 pendingSpreadsheetUndoState = null ;
@@ -1112,6 +1116,32 @@ private void SpreadsheetDataGrid_CellEditEnding(object sender, DataGridCellEditE
11121116 DispatcherPriority . Background ) ;
11131117 }
11141118
1119+ private void SpreadsheetDataGrid_PreparingCellForEdit ( object sender , DataGridPreparingCellForEditEventArgs e )
1120+ {
1121+ DetachSpreadsheetCellEditor ( ) ;
1122+
1123+ if ( e . EditingElement is not System . Windows . Controls . TextBox cellTextBox )
1124+ return ;
1125+
1126+ activeSpreadsheetCellEditor = cellTextBox ;
1127+ lastSpreadsheetCellEditorSelectedText = cellTextBox . SelectedText ;
1128+ cellTextBox . SelectionChanged += SpreadsheetCellEditor_SelectionChanged ;
1129+ }
1130+
1131+ private void SpreadsheetCellEditor_SelectionChanged ( object sender , RoutedEventArgs e )
1132+ {
1133+ if ( sender is System . Windows . Controls . TextBox cellTextBox )
1134+ lastSpreadsheetCellEditorSelectedText = cellTextBox . SelectedText ;
1135+ }
1136+
1137+ private void DetachSpreadsheetCellEditor ( )
1138+ {
1139+ if ( activeSpreadsheetCellEditor is not null )
1140+ activeSpreadsheetCellEditor . SelectionChanged -= SpreadsheetCellEditor_SelectionChanged ;
1141+
1142+ activeSpreadsheetCellEditor = null ;
1143+ }
1144+
11151145 private void SpreadsheetDataGrid_CurrentCellChanged ( object sender , EventArgs e )
11161146 {
11171147 if ( editorMode == EtwEditorMode . Spreadsheet )
@@ -1241,6 +1271,9 @@ private void SpreadsheetDataGrid_PreviewMouseRightButtonDown(object sender, Mous
12411271
12421272 private void SpreadsheetDataGrid_SelectedCellsChanged ( object sender , SelectedCellsChangedEventArgs e )
12431273 {
1274+ if ( activeSpreadsheetCellEditor is null )
1275+ lastSpreadsheetCellEditorSelectedText = string . Empty ;
1276+
12441277 UpdateSelectedSpreadsheetCellCoordinates ( ) ;
12451278
12461279 if ( editorMode == EtwEditorMode . Spreadsheet )
@@ -1826,6 +1859,28 @@ private bool IsSpreadsheetCellEditorFocused()
18261859 && FindVisualParent < System . Windows . Controls . TextBox > ( focusedElement ) is not null ;
18271860 }
18281861
1862+ private string GetSpreadsheetSelectedText ( )
1863+ {
1864+ if ( activeSpreadsheetCellEditor is System . Windows . Controls . TextBox cellTextBox )
1865+ return cellTextBox . SelectedText ;
1866+
1867+ if ( lastSpreadsheetCellEditorSelectedText . Length > 0 )
1868+ return lastSpreadsheetCellEditorSelectedText ;
1869+
1870+ List < ( int RowIndex , int ColumnIndex ) > targetCells = GetSelectedOrCurrentSpreadsheetCellCoordinates ( ) ;
1871+ if ( targetCells . Count != 1 )
1872+ return string . Empty ;
1873+
1874+ ( int rowIndex , int columnIndex ) = targetCells [ 0 ] ;
1875+ if ( rowIndex < 0 || rowIndex >= spreadsheetTable . Rows . Count
1876+ || columnIndex < 0 || columnIndex >= spreadsheetTable . Columns . Count )
1877+ {
1878+ return string . Empty ;
1879+ }
1880+
1881+ return spreadsheetTable . Rows [ rowIndex ] [ columnIndex ] ? . ToString ( ) ?? string . Empty ;
1882+ }
1883+
18291884 internal static bool ShouldHandleSpreadsheetDeleteKey ( int selectedCellCount , bool isCellEditorFocused )
18301885 {
18311886 return ! isCellEditorFocused && selectedCellCount > 0 ;
@@ -3461,10 +3516,11 @@ private void LaunchFindAndReplace()
34613516 findAndReplaceWindow . TextEditWindow = this ;
34623517 findAndReplaceWindow . Show ( ) ;
34633518
3519+ string selectedText = IsSpreadsheetMode ? GetSpreadsheetSelectedText ( ) : PassedTextControl . SelectedText ;
34643520
3465- if ( PassedTextControl . SelectedText . Length > 0 )
3521+ if ( selectedText . Length > 0 )
34663522 {
3467- findAndReplaceWindow . SetFindText ( PassedTextControl . SelectedText . Trim ( ) ) ;
3523+ findAndReplaceWindow . SetFindText ( selectedText . Trim ( ) ) ;
34683524 findAndReplaceWindow . SearchForText ( ) ;
34693525 }
34703526 }
0 commit comments