2011-07-14 11 views
5

Mam RichTextBox, który musi zawierać kilka przycisków, które powinny być usunięte (obsługiwane), gdy użytkownik edytuje zawartość w nim. Mogę sprawdzić, czy usuwam (Backspace, Delete lub Cut) tekst (znaki), ale nie element kontrolny <Button>.Jak sprawdzić, czy usuwam (Backspace, Delete lub "Cut") UMIlement w RichTextBox?

dołączony jest kod Użyłem

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 
    } 

i

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; */ 
     } 
    } 

Rozumiem, że dostaje tylko start.GetTextInRun tekst, a otrzymuję wartość "" (null) podczas cofania przycisku. Ale próbowałem również start.GetAdjacentElement, ale nie udało mi się odzyskać w tym samym stanie.

Proszę pomóc!

+0

Oblicz pozycję Caret i guzik, w stosunku do RTB. – Code0987

+0

Nie rozumiem. Jak mogę to zrobić? Mogę uzyskać pozycję opiekuna, ale nie mogę uzyskać przycisku –

+0

przycisku mam na myśli fizyczną pozycję. Możesz obliczyć ich fizyczną pozycję, a następnie, jeśli zderzają się i twój stan się zgadza, zrób swoje rzeczy. – Code0987

Odpowiedz

-1

Właśnie replikowałem twój kod powyżej (w przybliżeniu) i kiedy ustawiam kursor po dodanym przycisku i wciskam Backspace, przycisk jest usuwany z RichTextBox nawet bez twojego kodu PreviewKeyDown. Jestem bardzo zdezorientowany, ponieważ wydaje się, że odpowiedź brzmi: po prostu nie musisz nic robić. Oto mój kod:

<Window x:Class="WpfApplication4.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    <RichTextBox 
     x:Name="tRTB" 
     HorizontalAlignment="Left" 
     Keyboard.PreviewKeyDown="tRTB_PreviewKeyDown"> 
    </RichTextBox> 
    </Grid> 
</Window> 

i kod za ...

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    public void AppendNewButton(int i) 
    { 
     Button addB = new Button(); 
     addB.Content = i; 
     addB.HorizontalAlignment = HorizontalAlignment.Left; 

     var insertionPosition = tRTB.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); 

     var inline = new InlineUIContainer(addB); 
     insertionPosition.Paragraph.Inlines.InsertAfter(
      (Inline)insertionPosition.Parent, 
      inline); 

     tRTB.CaretPosition = tRTB.CaretPosition.GetNextInsertionPosition(LogicalDirection.Forward); 
    } 

    public void tRTB_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.B) 
     { 
      AppendNewButton(7); 
      e.Handled = true; 
     } 
    } 
} 
+0

um, nie do końca rozumiem, co tu robisz. Nie chcę, aby przycisk został usunięty, dlatego sprawdzam na PreviewKeyDown. z tego, co widzę, dodajesz przycisk, gdy naciskasz "B"? –

+0

Niestety, nie pamiętam już więcej ... mój wniosek był taki, że ta kontrola jest tylko kulawa i nie powinna być używana do niczego więcej niż to, co daje z pudełka. –

Powiązane problemy