UI⑥Control族控件RichTextBox 

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

字段
名称备注权限

IsDocumentEnabledProperty

标识 IsDocumentEnabled 依赖项属性。public static readonly
属性
名称备注权限

CaretPosition

获取或设置输入插入符号的位置。get; set;

Document

获取或设置表示 FlowDocument 的内容的 RichTextBoxget; set;

IsDocumentEnabled

获取或设置一个值,该值指示用户是否可以与 UIElement 内的 ContentElement 和 RichTextBox 对象进行交互。get; set;

LogicalChildren

获取一个可循环访问 RichTextBox 的逻辑子级的枚举器。get;

Selection

获取一个包含 RichTextBox 中当前选定内容的 TextSelection 对象。get;
方法
名称备注权限

GetNextSpellingErrorPosition

返回指向 TextPointer 的内容中下一个拼写错误的 RichTextBoxpublic

GetPositionFromPoint

返回 TextPointer,它指向与指定职位最近的插入点。public

GetSpellingError

返回与RichTextBox 的内容中指定的位置处的任何拼写错误相关联的 SpellingError 对象。public

GetSpellingErrorRange

返回一个 TextRange 对象,其中包括 RichTextBox 的内容中指定位置处的任何拼错的单词。public

MeasureOverride

调用以重新测量 RichTextBoxprotected

OnCreateAutomationPeer

创建并返回此 AutomationPeer 的 RichTextBox 对象。protected

OnDpiChanged

呈现此多信息文本框时所使用的 DPI 发生变化时进行调用。protected

ShouldSerializeDocument

返回一个值,该值指示在序列化 Document 对象期间,是否应对 RichTextBox 属性的有效值进行序列化。public
接口
名称备注

IAddChild.AddChild

void IAddChild.AddChild (object value);

IAddChild.AddText

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将文本控件的当前选定内容复制到 Clipboardpublic
Cut从文本编辑控件中删除当前选定内容,并将其复制到 Clipboardpublic
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
OnPreviewKeyDownKeyDown 发生时调用。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
事件
名称备注

SelectionChanged

在文本选择改变时发生。

TextChanged

在文本元素中的内容更改的情况下发生。


范例

 

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

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值