Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->TextBoxBase->RichTextBox
RichTextBox
表示对 FlowDocument 对象进行操作的丰富编辑控件。
FlowDocument 是RichTextBox 唯一支持的子元素 。
RichTextBox 为冒泡 MouseUp和 MouseDown 事件提供内置处理。 因此永远不会调用在中侦听 RichTextBox 的 MouseUp
或,MouseDown
事件的自定义事件处理程序。 如果需要响应这些事件,请改为侦听PreviewMouseUp 和 PreviewMouseDown 隧道事件,或向HandledEventsToo 参数注册处理程序 (此后一选项仅可通过代码) 。 除非您有意要禁用RichTextBox对这些事件的本机处理,否则不要将事件标记为已处理,并且要注意,这会对控件的UI产生显着影响。
RichTextBox支持复制和粘贴图像时,当前不支持某些方案,可能无法正常工作。 下表总结了这些方案和预期结果。
图像复制源 | 图像粘贴结果 |
---|---|
图像源是图形图元文件 | 未粘贴任何图像 |
图像源使用相对路径或链接 | 粘贴了乱帖或空白图像 |
图像源链接不会以预期的图像格式 ( 结束。PNG、。JPG、。GIF) | 粘贴了乱帖或空白图像 |
从格式错误的格式文本复制的图像源 (RTF) | 链接到图像源的 (而不是图像) |
将 HTML 内容粘贴到 RichTextBox 可能会导致意外行为,因为 RichTextBox 使用 RTF 格式,而不是直接使用 HTML 格式。
文本总是包装在RichTextBox中 。 如果你不希望文本换行,请将 FlowDocument 上 将PageWidth设置为大于RichTextBox 的宽度 。 但是,一旦达到页面宽度,文本仍会换行。
RichTextBox使用 HorizontalContentAlignment 和VerticalContentAlignment 属性在中水平和垂直对齐内容。 RichTextBox通过 HorizontalAlignment 和VerticalAlignment 属性在页面布局中对齐。
默认情况下,滚动条在 RichTextBox 上不可见。 若要使滚动条可见,请将 VerticalScrollBarVisibility 属性设置为 Visible 或 Auto 。
通常情况下,应该使用 TextChanged 事件来检测 TextBox 或RichTextBox更改中的文本 ,而不是在预期时进行检测 KeyDown 。 有关示例,请参阅 如何:在文本框中的文本发生更改时进行检测。
RichTextBox 支持多种键盘命令。 有关键盘命令的列表,请参阅 EditingCommands 。
此控件的依赖项属性可以由控件的默认样式设置。如果使用默认样式设置属性,则当控件出现在应用程序中时,该属性可能会从其默认值更改。默认样式由运行应用程序时使用的桌面主题确定。有关更多信息,请参见默认WPF主题。
名称 | 备注 | 权限 |
标识 IsDocumentEnabled 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
获取或设置输入插入符号的位置。 | get; set; | |
获取或设置表示 FlowDocument 的内容的 RichTextBox。 | get; set; | |
获取或设置一个值,该值指示用户是否可以与 UIElement 内的 ContentElement 和 RichTextBox 对象进行交互。 | get; set; | |
获取一个可循环访问 RichTextBox 的逻辑子级的枚举器。 | get; | |
获取一个包含 RichTextBox 中当前选定内容的 TextSelection 对象。 | get; |
名称 | 备注 | 权限 |
返回指向 TextPointer 的内容中下一个拼写错误的 RichTextBox。 | public | |
返回 TextPointer,它指向与指定职位最近的插入点。 | public | |
返回与RichTextBox 的内容中指定的位置处的任何拼写错误相关联的 SpellingError 对象。 | public | |
返回一个 TextRange 对象,其中包括 RichTextBox 的内容中指定位置处的任何拼错的单词。 | public | |
调用以重新测量 RichTextBox。 | protected | |
创建并返回此 AutomationPeer 的 RichTextBox 对象。 | protected | |
呈现此多信息文本框时所使用的 DPI 发生变化时进行调用。 | protected | |
返回一个值,该值指示在序列化 Document 对象期间,是否应对 RichTextBox 属性的有效值进行序列化。 | public |
名称 | 备注 |
void IAddChild.AddChild (object value); | |
void IAddChild.AddText (string text); |
TextBoxBase
为文本编辑控件提供功能的抽象基类,包括 TextBox 和 RichTextBox。
名称 | 备注 | 权限 |
AcceptsReturnProperty | 标识 AcceptsReturn 依赖项属性。 | public static readonly |
AcceptsTabProperty | 标识 AcceptsTab 依赖项属性。 | public static readonly |
AutoWordSelectionProperty | 标识 AutoWordSelection 依赖项属性。 | public static readonly |
CaretBrushProperty | 标识 CaretBrush 依赖项属性。 | public static readonly |
HorizontalScrollBarVisibilityProperty | 标识 HorizontalScrollBarVisibility 依赖项属性。 | public static readonly |
IsInactiveSelectionHighlightEnabledProperty | 标识 IsInactiveSelectionHighlightEnabled 依赖项属性。 | public static readonly |
IsReadOnlyCaretVisibleProperty | 标识 IsReadOnlyCaretVisible 依赖项属性。 | public static readonly |
IsReadOnlyProperty | 标识 IsReadOnly 依赖项属性。 | public static readonly |
IsSelectionActiveProperty | 标识 IsSelectionActive 依赖项属性。 | public static readonly |
IsUndoEnabledProperty | 标识 IsUndoEnabled 依赖项属性。 | public static readonly |
SelectionBrushProperty | 标识 SelectionBrush 依赖项属性。 | public static readonly |
SelectionChangedEvent | 标识 SelectionChanged 路由事件。 | public static readonly |
SelectionOpacityProperty | 标识 SelectionOpacity 依赖项属性。 | public static readonly |
SelectionTextBrushProperty | 标识 SelectionTextBrush 依赖项属性。 | public static readonly |
TextChangedEvent | 标识 TextChanged 路由事件。 | public static readonly |
UndoLimitProperty | 标识 UndoLimit 依赖项属性。 | public static readonly |
VerticalScrollBarVisibilityProperty | 标识 VerticalScrollBarVisibility 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
AcceptsReturn | 获取或设置一个值,该值指示在用户按 ENTER 键时文本编辑控件如何响应。 | get; set; |
AcceptsTab | 获取或设置一个值,该值指示在用户按 TAB 键时文本编辑控件如何响应。 | get; set; |
AutoWordSelection | 获取或设置一个值,该值决定在用户通过在单词中拖动鼠标来选择单词的一部分时是否同时选定该单词的其余部分。 | get; set; |
CanRedo | 获取一个值,该值指示是否可重做最新的撤消操作。 | get; set; |
CanUndo | 获取一个值,该值指示是否可撤消最新的操作。 | get; set; |
CaretBrush | 获取或设置用于绘制文本框的插入符号的画笔。 | get; set; |
ExtentHeight | 获取可见内容区域的垂直大小。 | get; |
ExtentWidth | 获取可见内容区域的水平大小。 | get; |
HorizontalOffset | 获取或设置水平滚动条位置。 | get; |
HorizontalScrollBarVisibility | 获取或设置一个值,该值指示是否显示水平滚动条。 | get; set; |
IsInactiveSelectionHighlightEnabled | 获取或设置指示当文本框没有焦点时,文本框是否显示所选文本的值。 | get; set; |
IsReadOnly | 获取或设置一个值,该值指示文本编辑控件对于与该控件交互的用户是否是只读的。 | get; set; |
IsReadOnlyCaretVisible | 获取或设置一个值,该值指示只读文本框是否显示插入符号。 | get; set; |
IsSelectionActive | 获取指示文本框是否具有焦点和选择文本的值。 | get; |
IsUndoEnabled | 获取或设置一个值,该值指示文本编辑控件是否支持撤消功能。 | get; set; |
SelectionBrush | 获取或设置会突出显示选定文本的画笔。 | get; set; |
SelectionOpacity | 获取或设置 SelectionBrush 的不透明度。 | get; set; |
SelectionTextBrush | 获取或设置一个值,此值定义用于所选文本的画笔。 | get; set; |
SpellCheck | 获取一个 SpellCheck 对象,通过它可以访问 TextBoxBase 或 RichTextBox 文本内容中的拼写错误。 | get; |
UndoLimit | 获取或设置存储在撤消队列中的操作的数目。 | get; set; |
VerticalOffset | 获取或设置垂直滚动条的位置。 | get; |
VerticalScrollBarVisibility | 获取或设置一个值,该值指示是否显示垂直滚动条。 | get; set; |
ViewportHeight | 获取可滚动的内容区域的垂直大小。 | get; |
ViewportWidth | 获取可滚动的内容区域的水平大小。 | get; |
名称 | 备注 | 权限 |
AppendText | 将字符串追加到文本控件的内容。 | public |
BeginChange | 开始更改块。 | public |
Copy | 将文本控件的当前选定内容复制到 Clipboard。 | public |
Cut | 从文本编辑控件中删除当前选定内容,并将其复制到 Clipboard。 | public |
DeclareChangeBlock | 创建更改块。 | public |
EndChange | 结束更改块。 | public |
LineDown | 将控件的内容向下滚动一行。 | public |
LineLeft | 将控件的内容向左滚动一行。 | public |
LineRight | 将控件的内容向右滚动一行。 | public |
LineUp | 将控件的内容向上滚动一行。 | public |
LockCurrentUndoUnit | 锁定应用程序的撤消堆栈的最新撤消单元。 这将阻止锁定的单元与后续添加的撤消单元合并。 | public |
OnApplyTemplate | 在应用控件模板时进行调用。 | public |
OnContextMenuOpening | 只要未处理的 ContextMenuOpening 路由事件在其路由中到达此类,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnDragEnter | 每当未处理的 DragEnter 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnDragLeave | 每当未处理的 DragLeave 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnDragOver | 每当未处理的 DragOver 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnDrop | 每当未处理的 DragEnter 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnGiveFeedback | 每当未处理的 GiveFeedback 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnGotKeyboardFocus | 每当未处理的 GotKeyboardFocus 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnKeyDown | 每当未处理的 KeyDown 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnKeyUp | 每当未处理的 KeyUp 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnLostFocus | 引发 LostFocus 事件(用提供的参数)。 | protected |
OnLostKeyboardFocus | 每当未处理的 LostKeyboardFocus 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnMouseDown | 每当未处理的 MouseDown 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnMouseMove | 每当未处理的 MouseMove 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnMouseUp | 每当未处理的 MouseUp 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnMouseWheel | 当将 MouseWheel 事件路由到此类(或从此类继承的类)时进行调用。 | protected |
OnPreviewKeyDown | KeyDown 发生时调用。 | protected |
OnQueryContinueDrag | 每当未处理的 QueryContinueDrag 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnQueryCursor | 每当未处理的 QueryCursor 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
OnSelectionChanged | 在插入符号或当前选定内容更改位置时进行调用。 | protected |
OnTemplateChanged | 在控件模板更改时进行调用。 | protected |
OnTextChanged | 在此编辑控件中的内容发生更改时进行调用。 | protected |
OnTextInput | 每当未处理的 TextInput 附加路由事件在其路由中发生在一个从此类派生的元素上时,就会调用此方法。 实现此方法可为此事件添加类处理。 | protected |
PageDown | 将控件的内容向下滚动一页。 | public |
PageLeft | 将控件的内容向左滚动一页。 | public |
PageRight | 将控件的内容向右滚动一页。 | public |
PageUp | 将控件的内容向上滚动一页。 | public |
Paste | 将剪贴板的内容粘贴到文本编辑控件中的当前选定内容上。 | public |
Redo | 撤消最新的撤消命令。 换句话说,重做撤消堆栈上的最新撤消单元。 | public |
ScrollToEnd | 将编辑控件的视图滚动到内容的末尾。 | public |
ScrollToHome | 将编辑控件的视图滚动到视区的开头。 | public |
ScrollToHorizontalOffset | 将编辑控件的内容滚动到指定的水平偏移。 | public |
ScrollToVerticalOffset | 将编辑控件的内容滚动到指定的垂直偏移。 | public |
SelectAll | 选择文本编辑控件的全部内容。 | public |
Undo | 撤消最新的撤消命令。 换句话说,撤消位于撤消堆栈上的最新撤消单元。 | public |
名称 | 备注 |
---|---|
在文本选择改变时发生。 | |
在文本元素中的内容更改的情况下发生。 |
范例
<Window
x:Class="RichTextBoxDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RichTextBoxDemo"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="500"
mc:Ignorable="d">
<StackPanel>
<RichTextBox SelectionChanged="OnSelectionChanged" TextChanged="OnTextChanged">
<FlowDocument>
<BlockUIContainer>
<Button Content="BlockUIContainer:一个块级别的流内容元素使 UIElement 元素(例如,Button)嵌入(承载)流内容。" />
</BlockUIContainer>
<List>
<ListItem>
<Paragraph>
<Bold>Lits:提供用于在有序列表或无序列表中呈现内容的功能的块级别流内容元素。</Bold></Paragraph>
</ListItem>
<ListItem>
<Paragraph>List1</Paragraph>
</ListItem>
<ListItem>
<Paragraph>List2</Paragraph>
</ListItem>
</List>
<Paragraph>
<Bold>Bold:一个内联级流内容元素,该元素使内容使用粗体的字体粗细进行呈现。</Bold>
<LineBreak />
<Figure Background="LightBlue">
<Paragraph>Figure:一个内联级别的用于承载图形的流内容元素。 图形是带有位置属性的流内容的一部分,可以独立于 FlowDocument 中的主内容流自定义该部分。</Paragraph>
</Figure>
<Floater HorizontalAlignment="Left" Background="LightGreen">
<Paragraph>Floater:提供一个内联级别的流内容元素,该元素用于承载一个浮标。 “浮标”显示与 FlowDocument 中的主内容流平行的图像和其他内容。</Paragraph>
</Floater>
<LineBreak />
<Hyperlink NavigateUri="https://mp.csdn.net/editor/html/116370044">Hyperlink:提供用于在流内容中承载超链接的功能的内联级别的流内容元素。</Hyperlink>
<LineBreak />
<InlineUIContainer>
<Button Content="InlineUIContainer:一个内联级别的流内容元素使 UIElement 元素(例如 Button)嵌入(承载)流内容。" />
</InlineUIContainer>
<LineBreak />
<Italic>Italic:提供将导致内容以倾斜字体样式呈现的内联级别流内容元素。</Italic>
<LineBreak />
<Run>Run:旨在包含一连串格式化或非格式化文本的内联级别流内容元素。</Run>
<LineBreak />
<Span><Bold>Span:对其他 Inline 流内容元素进行分组。</Bold></Span>
<LineBreak />
<Underline>Underline:一个内联级别的流内容元素,该元素使内容以带有下划线的文本效果呈现。</Underline>
</Paragraph>
<Section>
<Paragraph>Section:用于对其他 Block 元素进行分组的块级别流内容元素。</Paragraph>
</Section>
<Table CellSpacing="1">
<Table.Columns>
<TableColumn />
<TableColumn />
</Table.Columns>
<TableRowGroup>
<TableRow>
<TableCell>
<Paragraph>Table:提供基于网格的演示文稿(按行和列组织)的块级别流内容元素。</Paragraph>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Paragraph>TableCell10</Paragraph>
</TableCell>
<TableCell>
<Paragraph>TableCell11</Paragraph>
</TableCell>
</TableRow>
<TableRow>
<TableCell>
<Paragraph>TableCell20</Paragraph>
</TableCell>
<TableCell>
<Paragraph>TableCell21</Paragraph>
</TableCell>
</TableRow>
</TableRowGroup>
</Table>
</FlowDocument>
</RichTextBox>
<TextBlock />
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace RichTextBoxDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
int count = 0;
public MainWindow()
{
InitializeComponent();
}
private void OnSelectionChanged(object sender, RoutedEventArgs e)
{
if (this.IsLoaded == true /*&& Mouse.LeftButton == MouseButtonState.Released*/)
foreach (var item in ((sender as RichTextBox).Parent as StackPanel).Children)
{
if (item is TextBlock) (item as TextBlock).Text = "OnSelectionChanged" + (++count);
}
}
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
if (this.IsLoaded == true) MessageBox.Show("OnTextChanged");
}
}
}