【问题标题】:replace RichTextBox content binds to empty string替换 RichTextBox 内容绑定到空字符串
【发布时间】:2016-05-26 22:18:57
【问题描述】:

在 WPF(.Net 4.5) 中,我的 xaml 中有 RichTextBox

    <RichTextBox Height="40" Width="100">
        <FlowDocument>
            <Paragraph>
                <Run Text="{Binding TestRichTextBox}"/>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>

在 ViewModel 中我有这个属性

string testRichTextBox;
public string TestRichTextBox
{
    get { return testRichTextBox; }
    set 
    {
        if (testRichTextBox == value)
            return;
        testRichTextBox = value;
        onPropertyChanged("TestRichTextBox"); 
    }
}

场景:

  1. RichTextBox 有内容

  2. 选择所有文本(ctrl+A)

  3. 粘贴新文本

在 ViewModel 中我在 set 方法上有断点,新的 Value 是空字符串。

这是正常行为还是错误?

【问题讨论】:

    标签: wpf binding richtextbox


    【解决方案1】:

    您能试试这个并检查var text 是否返回任何值吗?

    public Window1()
    {
        InitializeComponent();
    
        // "tb" is a richtextBox
        DataObject.AddPastingHandler(tb, OnPaste);
    }
    
    private void OnPaste(object sender, DataObjectPastingEventArgs e)
    {
        var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true);
        if (!isText) return;
    
        var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string;
        ...
    }
    

    【讨论】:

    • 不幸的是它不起作用。仍然设置为空字符串,其他更改对文本框没有影响。
    • 粘贴事件后,控件接收到空字符串值,然后绑定被破坏。
    • 全选并替换文本删除Paragraph对象并创建新段落。那么绑定就不再存在了。
    • 不,我使用 RichTextBox 的Document 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2019-10-31
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多