wpf中的默认的RichTextBox不支持内容及当前选中项的绑定,而在实际使用中却经常需要,这便使得View与VM无法更好的分离,在这里,我实现自定义的一个RichTextBox,可以直接绑定到VM中。具体代码如下:
public class MyRichTextBox : RichTextBox
{
private bool _isuioper = false;
public static readonly DependencyProperty ContentTextProperty = DependencyProperty.Register(
"ContentText", typeof (string), typeof (MyRichTextBox), new PropertyMetadata("", ContentTextChanged));
public string ContentText
{
get { return (string) GetValue(ContentTextProperty); }
set { SetValue(ContentTextProperty, value); }
}
private static void ContentTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var rich = d as MyRichTextBox;
if (null != rich && !rich._isuioper)
rich.ContentRange().Text = rich.ContentText;
}
public static readonly DependencyProperty ContentRtfProperty = DependencyProperty.Register(
"ContentRtf", typeof (string), typeof (MyRichTextBox), new PropertyMetadata("", ContentRtfChanged));
public string ContentRtf
{
get { return (string) GetValue(ContentRtfProperty); }
set { SetValue(ContentRtfProperty, value); }
}
private static void ContentRtfChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var rich = d as MyRichTextBox;
if (null != rich && !rich._isuioper)
rich.LoadContentRtf(rich.ContentRtf);
}
public static readonly DependencyProperty SelectedTextProperty = DependencyProperty.Register(
"SelectedText", typeof (string), typeof (MyRichTextBox), new PropertyMetadata("", SelectedTextChanged));
public string SelectedText
{
get