用户控件使用richTextBox,可绑定的richTextBox

时间:2011-01-08 18:59:52

标签: wpf richtextbox flowdocument

我尝试使用richTextBox进行用户控制,因为我需要可绑定的richTextbox。

我在这里找到了一些解决方案:Richtextbox wpf binding

我想使用 Arcturus 的解决方案。使用richTextBox控件创建用户控件并使用依赖项属性。

在XAML中,我只有richTextBox控件:

<UserControl x:Class="WpfApplication2.BindableRichTextBoxControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <RichTextBox Name="RichTextBox" Grid.Row="0"/>    
    </Grid>
</UserControl>

在CodeBehind中:

public partial class BindableRichTextBoxControl : UserControl
{
    public static readonly DependencyProperty DocumentProperty =
    DependencyProperty.Register("Document", typeof(FlowDocument), typeof(BindableRichTextBoxControl), 
    new PropertyMetadata(OnDocumentChanged));

    public FlowDocument Document
    {
        get { return (FlowDocument)GetValue(DocumentProperty); }
        set { SetValue(DocumentProperty, value); }
    }

    private static void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var control = (BindableRichTextBoxControl)d;
        if (e.NewValue == null)
            control.RichTextBox.Document=new FlowDocument();

        //?
        control.RichTextBox.Document = document;
    }


    public BindableRichTextBoxControl()
    {
        InitializeComponent();
    }
}

我对OnDocumentChanged方法的最后一行感到困惑。

        control.RichTextBox.Document = document;

我无法确定什么是varibale 文档

1 个答案:

答案 0 :(得分:0)

我认为他的意思是:

private static void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    RichTextBoxControl control = (RichTextBoxControl) d;
    if (e.NewValue == null)
        control.RTB.Document = new FlowDocument(); //Document is not amused by null :)
    else
        control.RTB.Document = e.NewValue;
}

但我建议你对他原来的答案发表评论。