私はRichTextBox
を持っています。このボタンには、ユーザーがコンテンツを編集しているときに、適切に削除(処理)されるべきいくつかのボタンが含まれている必要があります。 <Button>
制御要素ではない(バックスペース、削除または切り取り)テキスト(文字)を削除しているかどうかを確認することができます。添付RichTextBox内のUIElementを削除する(Backspace、Delete、または 'Cut')かどうかを確認するにはどうすればいいですか?
は私がstart.GetTextInRunのみを取得することを理解
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
}
と
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; */
}
}
を使用したコードですテキスト、私は得るボタンをバックスペーシングするときの値 ""(null)。しかし、私はstart.GetAdjacentElementも試してみましたが、同じ条件でaを取得することはできません。
助けてください!
RTBに対するキャレットとボタンの位置を計算します。ここに私のコードです。 – Code0987
私はちょうどあなたを得ることはできません..私はどのようにそれを行うのですか?私はキャレットの位置を得ることができますが、私はボタンを得ることができません –
私は物理的な位置を意味します。彼らの物理的な位置を計算することができますし、それらが衝突し、条件が一致する場合は、あなたのものを行います。 – Code0987