Выбранный текст в текстовом поле - PullRequest
1 голос
/ 24 октября 2011

Привет, у меня есть 2 списка в сетке. Каждый список содержит текстовое поле, и оба текстовых поля в обоих списках имеют одинаковый текст. Когда я выбираю часть текста в любом текстовом поле, другое текстовое поле также выделяет ту же часть текста.

Можно ли сделать привязку между двумя текстовыми полями в двух разных списках просмотра?

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Как пишет 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, и все готово.

1 голос
/ 24 октября 2011

К сожалению, поскольку SelectionText, SelectionLength и SelectionStart не являются свойствами зависимостей, эти два текстовых поля не могут быть связаны двумя способами с этими свойствами.

Вам придется написать прикрепленное поведение, прикрепить одно текстовое поле к другому и обработать TextBox.SelectionChangedEvent для обоих, а также синхронизировать другое при обработке события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...