0

嗨,我正在使用 WPF 并使用 MVVM 模式。所以我的问题是我试图将 RichTextBox 的选定文本绑定到我的 ViewModel 中的一个属性,但我无法绑定 Selection 属性。

那么我该怎么做呢?

将 RichTextBox 的 Selection 属性绑定到我的 ViewModel 中的属性是我认为更好地将效果和装饰应用于文本的方式。

如果有人知道在 ViewModel 中了解 RichTextBox 的选定文本的更好方法,请告诉我。我开始学习 FlowDocuments 并使用 RichTextBox,所以这就是为什么我有点迷失了。

提前致谢!

4

1 回答 1

3

您可以使用Behavior

public class RichTextSelectionBehavior : Behavior<RichTextBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SelectionChanged += RichTextBoxSelectionChanged;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.SelectionChanged -= RichTextBoxSelectionChanged;
    }

    void RichTextBoxSelectionChanged(object sender, System.Windows.RoutedEventArgs e)
    {
        SelectedText = AssociatedObject.Selection.Text;
    }

    public string SelectedText
    {
        get { return (string)GetValue(SelectedTextProperty); }
        set { SetValue(SelectedTextProperty, value); }
    }

    public static readonly DependencyProperty SelectedTextProperty =
        DependencyProperty.Register(
            "SelectedText",
            typeof(string),
            typeof(RichTextSelectionBehavior),
            new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedTextChanged));

    private static void OnSelectedTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var behavior = d as RichTextSelectionBehavior;
        if (behavior == null)
            return;
        behavior.AssociatedObject.Selection.Text = behavior.SelectedText;
    }
}

XAML 用法:

    <RichTextBox>
        <i:Interaction.Behaviors>
            <local:RichTextSelectionBehavior SelectedText="{Binding SelectedText}" />
        </i:Interaction.Behaviors>
    </RichTextBox>

SelectedTextViewModel 上的字符串属性在哪里)

于 2012-04-18T23:23:33.063 回答