wpf richtextbox(WPF问题,richtextbox控件能绑定到数据表中的一个字段吗怎么做 listbox选中当前项的事件是什么呢)
本文目录
- WPF问题,richtextbox控件能绑定到数据表中的一个字段吗怎么做 listbox选中当前项的事件是什么呢
- wpf中的richTextBox怎么改变关键字的颜色
- wpf中如何让richtextbox的滚动条显示
- WPF 中 RichTextBox 关键词着色
- C# wpf RichTextBox 多行显示数据
- WPF RichTextBox文本的问题(好的绝对加分)
- C#WPF RichTextBox 怎么换行
WPF问题,richtextbox控件能绑定到数据表中的一个字段吗怎么做 listbox选中当前项的事件是什么呢
listbox里只有SelectionChanged事件用来对选中的当前项进行操作;
RichTextBox 的绑定需要自己写的方法类的,我给你代码吧~
xaml:
《RichTextBox local:RichTextBoxHelper.DocumentXaml="{Binding 字段名}" /》
方法类 RichTextBoxHelper.cs
using System.IO; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; public class RichTextBoxHelper : DependencyObject { public static string GetDocumentXaml(DependencyObject obj) { return (string)obj.GetValue(DocumentXamlProperty); } public static void SetDocumentXaml(DependencyObject obj, string value) { obj.SetValue(DocumentXamlProperty, value); } public static readonly DependencyProperty DocumentXamlProperty = DependencyProperty.RegisterAttached( "DocumentXaml", typeof(string), typeof(RichTextBoxHelper), new FrameworkPropertyMetadata { BindsTwoWayByDefault = true, PropertyChangedCallback = (obj, e) =》 { var richTextBox = (RichTextBox)obj; // Parse the XAML to a document (or use XamlReader.Parse()) var xaml = GetDocumentXaml(richTextBox); var doc = new FlowDocument(); var range = new TextRange(doc.ContentStart, doc.ContentEnd); range.Load(new MemoryStream(Encoding.UTF8.GetBytes(xaml)), DataFormats.Xaml); // Set the document richTextBox.Document = doc; // When the document changes update the source range.Changed += (obj2, e2) =》 { if(richTextBox.Document==doc) { MemoryStream buffer = new MemoryStream(); range.Save(buffer, DataFormats.Xaml); SetDocumentXaml(richTextBox, Encoding.UTF8.GetString(buffer.ToArray())); } }; }}); } 呵呵,代码有点乱,不好意思= =
wpf中的richTextBox怎么改变关键字的颜色
可以直接设置richTextBox的选中时的颜色属性:
richTextBox1.SelectionBrush = Brushes.Blue;
richTextBox1.SelectionOpacity = 0.5;
也可以在richTextBox的SelectionChanged事件中动态改变相关属性。
wpf中如何让richtextbox的滚动条显示
VerticalScrollBarVisibility="Visible" 上下的滚动条
《RichTextBox HorizontalAlignment="Left" Margin="186,172,0,218.685" Width="158" VerticalScrollBarVisibility="Visible"》
《FlowDocument》
《Paragraph》《Run Text="RichTextBox"/》《/Paragraph》
《/FlowDocument》
《/RichTextBox》
WPF 中 RichTextBox 关键词着色
用户输入时加红色标记,就需要再每次按键都判段,下面这段代码倒是实现了,但是效率很低,你可以试着优化下
private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
//获取richTextBox文本内容
TextRange tr1 = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
tr1 .ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
string content = tr1.Text;
//正则表达式,获取匹配()的子字符串集信息
MatchCollection mc = Regex.Matches(content, @"\(|\)");
//遍历每个匹配子字符串
foreach (Match m in mc)
{
if (m.Success)
{
//获取子字符串起始点
TextPointer txStart = GetPointerFromCharOffset(m.Index, richTextBox1.Document.ContentStart, richTextBox1.Document);
//获取子字符串结束
TextPointer txEnd = GetPointerFromCharOffset(m.Index + m.Length, richTextBox1.Document.ContentStart, richTextBox1.Document);
//获取子字符串位置
TextRange tr = new TextRange(txStart, txEnd);
//应用样式
tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
}
}
}
//根据匹配字符串的索引获取TextPointer
public TextPointer GetPointerFromCharOffset(Int32 charOffset, TextPointer startPointer, FlowDocument document)
{
TextPointer navigator = startPointer;
if (charOffset == 0)
{
return navigator;
}
TextPointer nextPointer = navigator;
Int32 counter = 0;
while (nextPointer != null && counter 《= charOffset)
{
if (nextPointer.CompareTo(document.ContentEnd) == 0)
{
return nextPointer;
}
nextPointer = nextPointer.GetNextInsertionPosition(LogicalDirection.Forward);
counter++;
}
return nextPointer;
}
C# wpf RichTextBox 多行显示数据
richTextBox1.AppendText("第一行\n " );
richTextBox1.AppendText("第二行\n " );
richTextBox1.AppendText("第三行\n " );
WPF RichTextBox文本的问题(好的绝对加分)
RichTextBox
只是一个控件,它所承载的内容由其
Document
属性来呈现.
Document
是一个
FlowDocument
类型.
FlowDocument
是放置块内容的容器
(Blocks),
这里的块是指
非行内的元素(这个我也不知道怎么用中文解释,如果你知道
html
的话,它们就是类似于
DIV
标签,而不能是类似
SPAN
标签的元素).
可用的块级元素只有几个,自己查阅一下
msdn,
块级元素可以再包含块级元素或
行级---Inline
derived元素).
[这里的块
和
行,用中文真的不好解释:块
Block-derived
行
-
Inline
derived]
所以你可以像下面一样将你的
String
放到
Document
中:
myRTB.Document
=
new
FlowDocument(new
Paragraph(new
Run(myString)));
由于
FlowDocument
是基于块级元素的,
所以它的内容可以由它的
Blocks
属性设定,
上面一行的代码拆解就是:
FlowDocument
doc
=
new
FlowDocument();
Paragraph
p
=
new
Paragraph();
//
Paragraph
类似于
html
的
P
标签
Run
r
=
new
Run(myString);
//
Run
是一个
Inline
的标签
p.Inlines.Add(r);
doc.Blocks.Add(p);
myRTB.Document
=
doc;
重点:
初始
RichTextBox
的
Document,Document
的
Blocks
可以随意添加,修改,删除内容等。
块级元素(Block-derived
elements)
还有其它的,除了
Paragraph
外。
-----------
具体参考可以查阅
关于
WPF
中
Documents
部分的章节。
C#WPF RichTextBox 怎么换行
您好,是这样的:
Private Declare Function SendMessage1 Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Function SendMessage2 Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Integer) As Long
’’ ....
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
Any就是指你在调用SendMessage 函数时,lParam 参数既可以传int,也可以传long,short等等其它类型的参数
相当于你把上面的SendMessage1和SendMessage2 等等函数简化为只需要写一个SendMessage 就可以。