Ho un RichTextBox
che deve contenere alcuni pulsanti che dovrebbero essere cancellati correttamente (gestiti) quando l'utente sta modificando il contenuto in esso. Sono in grado di controllare se sto cancellando (Backspace, Delete o Cut) il testo (caratteri) ma non l'elemento di controllo <Button>
.Come controllare se sto cancellando (Backspace, Delete o 'Cut') un UIElement in un RichTextBox?
In allegato è il codice che ho usato
XAML
<RichTextBox x:Name="tRTB"
HorizontalAlignment="Left"
Keyboard.PreviewKeyDown="tRTB_PreviewKeyDown"
PreviewTextInput="tRTB_PreviewTextInput">
<local:EnabledFlowDocument x:Name="tFD">
<Paragraph x:Name="tP">
</Paragraph>
</local:EnabledFlowDocument>
</RichTextBox>
C#
public void AppendNewButton(int i)
{
Button addB = new Button();
addB.Content = i;
addB.HorizontalAlignment = HorizontalAlignment.Left;
tP.Inlines.Add(addB);
tP.Inlines.Add("Bk" + i.ToString()); //appends a button and text in RTB
}
e
private void tRTB_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Back)
{
var start = tRTB.CaretPosition;
var t = start.GetTextInRun(LogicalDirection.Backward);
var end = start.GetNextContextPosition(LogicalDirection.Backward);
var t1 = end.GetTextInRun(LogicalDirection.Backward);
tRTB.Selection.Select(start, end);
tRTB.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
tRTB.Selection.Select(start, start);
//should handle deletion of button here
/* if (button is before cursor) */
/* e.Handled=true; */
}
}
Capisco che lo start.GetTextInRun ottiene solo il testo, e ottengo il valore "" (null) quando si esegue il backspacing di un pulsante. Ma ho provato anche start.GetAdjacentElement, ma non riesco a recuperarlo nella stessa condizione.
Si prega di aiuto!
calcolare la posizione di Caret e Button, rispetto a RTB. – Code0987
Non ti compro esattamente .. Come faccio? Posso ottenere la posizione di accento circonflesso, ma non riesco a ottenere il valore –
del pulsante intendo posizione fisica. Puoi calcolare la loro posizione fisica e poi se si scontrano e le tue condizioni corrispondono, fai le tue cose. – Code0987