- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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/
我将一些代码从 C# 翻译成 VB.NET(WPF、.NET 4) C# // Update the Z-Index of every UIElement in the Canvas. foreach
假设我想创建一个直接从 UIElement 继承的类,并且能够包含一个或多个 [外部添加的] UIElement 作为子级 - 如 Panel 和其他容器控件。让类以某种形式包含一组 UIElemen
场景:我有一个自定义范围UIElements (事实上,我已经替换了所有标准的 WPF FrameworkElements 我将使用更轻、更高效的对应物)用于自定义布局系统,旨在仅使用这些。它们都
执行此操作时出现运行时错误。 我有这门课: public abstract class AnnObject : DependencyObject 当我这样做时,它可以正常编译,但会引发运行时错误...
执行此操作时出现运行时错误。 我有这门课: public abstract class AnnObject : DependencyObject 当我这样做时,它可以正常编译,但会引发运行时错误...
首先让我说我是单元测试的新手,这实际上是我第一次尝试这样做。 我正在开发一个应用程序,用户可以在其中向 Canvas 添加元素、选择它们、移动它们等等。在每个选定的元素上,我添加一个 Adorner。
是否可以在 WPF 中订阅特定 UIElement 的属性? 我想在 Heightvalue 更改后立即为 UIElement 设置动画并将新高度添加到列表中,但我不知道如何订阅 HeightProp
在我的代码隐藏中,我想在特定的 UIElement 上启动动画,当该动画结束时,我想在该 UIElement 上进行一些其他处理。我无法弄清楚如何将我作为 Animation Completed 事件
我正在尝试获取托管 UIElement 的 Window 实例WinUI 3 中的实例。 有一个 helper method in the Window class in .NET ( see thi
我有这个代码: RotateTransform transform = myImage.RenderTransform as RotateTransform; transform.Angle = 25
我对下面的标记有两个问题: 为什么VisualTreeHelper.GetParent(button)返回空? 我怎样才能得到父级 Popup为 UIElement ? 最佳答案 而不是
有没有办法对 UIElements 进行逻辑分组或标记,例如在运行时添加的形状和控件以便于删除? 例如,我有一个 Grid带有一些(设计时)子元素并添加椭圆和 TextBlock s 到它在运行时。当
我不清楚您何时会使用 UIElement而不是 FrameworkElement ,以及为什么会有 FrameworkElement根本没有课。本质上,FrameworkElement 的额外功能是什
在 WPF 中如何放置常规 UIElement s 内嵌文本?例如,某种文本分类将用包含特定选项的下拉列表替换一段文本。 我使用了像 Span、Bold、Hyperlink 这样的对象,它们对内联文本
好的,我知道 FrameworkElement ,它是 UIElement 的直接子类, 具有 Parent 属性,但 Panels 具有类型 UIElement 的子级,不是 FrameworkEl
我有一些 xaml 标记,基本上如下所示: 我想判断鼠标是否超过Canvas B. 当我在鼠标悬停在 Canvas B 上时单击时,Mouse.DirectlyOver 返回 Canv
在 WPF/Silverlight 中,我可以在应用转换后获取 UIElement 的计算值吗? (根据下面的评论): 我有一个堆栈面板,并对其应用了 TranformGroup。该组中有两个平移和一
我的应用程序被标记为 UIElement 且仅限背景。我希望它在登录时加载。我是否仍然需要帮助应用程序来启动它,或者我可以使用 SMLoginItemSetEnabled 注册应用程序本身。 最佳答案
我一切正常,但是当我单击设置时,设置窗口(在 nswindowcontroller 中)会在我的 Mac 上运行的其他应用程序的背面打开。我希望它位于前面,以便用户单击它时可以看到它。 谢谢大家! 最
我正在尝试寻找一种通用方法来设置 UIElement 的 Background 属性。 我运气不好... 这是我目前所拥有的(尝试使用反射来获取 BackgroundProperty)。 Acti
我是一名优秀的程序员,十分优秀!