Search code examples
c#wpfdata-bindingtextboxselectedtext

Two-way SelectedText binding on TextBox using inheritance


I'm trying to replace the SelectedText of a TextBox with a new value by binding on the custom property 'Selected'. Currently, updating Selected through binding doesn't change the actual SelectedText. I'm almost there I think; at least mouse-selecting text is updating Selected.

I'd prefer solutions based on inheriting from TextBox if possible. Can anybody tell me what's missing please?

class SelectionTextbox : TextBox
{
    public static readonly DependencyProperty SelectionProperty = DependencyProperty.Register("Selection", typeof(string), typeof(SelectionTextbox));

    public string Selection
    {
        get
        {
            return (string)base.GetValue(SelectionProperty);
        }
        set
        {
            base.SetValue(SelectionProperty, value);
        }
    }
    protected override void OnSelectionChanged(RoutedEventArgs e)
    {
        base.OnSelectionChanged(e);
        Selection = SelectedText;
    }
}

Solution

  • The problem is, that you never actually do anything with the value you assign to Selection. You need to actually make it the selected text.

    public string Selection
    {
        get
        {
            return (string)base.GetValue(SelectionProperty);
        }
        set
        {
            base.SetValue(SelectionProperty, value);
            if(value != SelectedText)
                SelectedText = value;
        }
    }