Как пишет AngelWPF, свойства Selection * не являются свойствами зависимостей, поэтому вы не можете использовать привязку к ним данных.
Что вы можете сделать, это добавить собственную подкассу TextBox, которая имеет свойства зависимостей, которые заменяют исходные свойства. Они могут быть реализованы как обычные свойства зависимостей, используя те же имена, что и исходные свойства, но их определение должно быть public new
для замены оригиналов.
Я не буду публиковать здесь весь пример кода (слишком много кода, и у меня его нет на этом компьютере), но вы можете сделать что-то вроде следующего:
public class BindableSelectionTextBox : TextBox
{
// Defines the dependency property as normal
public static readonly DependencyProperty SelectedTextProperty =
DependencyProperty.RegisterAttached(SelectedText, typeof(string),
typeof(BindableSelectionTextBox),
new FrameworkPropertyMetadata("", SelectedTextPropertyChanged));
private static void SelectedTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var textBox = (TextBox)d;
textBox.SelectedText = (string)e.NewValue;
}
public new string SelectedText
{
get { return (string)GetValue(SelectedTextProperty); }
set
{
if(value != SelectedText)
{
SetValue(SelectedTextProperty, value);
}
}
}
public BindableSelectionTextBox()
{
SelectionChanged += OnSelectionChanged;
}
private void OnSelectionChanged(object sender, RoutedEventArgs e)
{
SelectedText = base.SelectedText;
}
}
Теперь вы должны повторить это для свойств SelectionStart
и SelectionLength
, и все готово.