gpt4 book ai didi

c# - 如何检查我是否正在删除(退格键、删除或 'Cut' )RichTextBox 中的 UIElement?

转载 作者:太空狗 更新时间:2023-10-29 23:53:34 25 4
gpt4 key购买 nike

我有一个 RichTextBox它必须包含一些按钮,当用户在其中编辑内容时应正确删除(处理)这些按钮。我可以检查我是否正在删除(退格键、删除或剪切)文本(字符)而不是 <Button>控制元素。

附上我用过的代码:

XAML:

<RichTextBox x:Name="tRTB"
HorizontalAlignment="Left"
Keyboard.PreviewKeyDown="tRTB_PreviewKeyDown"
PreviewTextInput="tRTB_PreviewTextInput">
<local:EnabledFlowDocument x:Name="tFD">
<Paragraph x:Name="tP"/>
</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; */
}
}

据我所知,start.GetTextInRun仅获取文本,退格按钮时我得到值“”( null )。但我试过了 start.GetAdjacentElement同样,但我无法成功检索 <Button>在相同的条件下。

最佳答案

我只是(粗略地)复制了您上面的代码,当我将光标放在添加的按钮之后并按下退格键时,即使没有您的 PreviewKeyDown 代码,该按钮也会从 RichTextBox 中删除。所以我很困惑,因为答案似乎就是你根本不需要做任何事情。这是我的代码:

<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>

以及背后的代码...

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

关于c# - 如何检查我是否正在删除(退格键、删除或 'Cut' )RichTextBox 中的 UIElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com