文本框中的选定文本

时间:2011-10-24 09:15:25

标签: c# wpf

我在网格中有2个列表视图。每个列表视图都包含一个文本框,两个列表视图中的两个文本框都具有相同的文本。当我在任一文本框中选择部分文本时,另一个文本框也将选择文本的相同部分。

可以在两个不同的listview中的两个文本框之间进行绑定吗?

2 个答案:

答案 0 :(得分:2)

正如AngelWPF所写,Selection * -properties不是依赖属性,所以你不能在它们上使用数据绑定。

您可以做的是添加自己的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;
  }
}

现在,您必须对SelectionStartSelectionLength属性重复此操作,您应该完成。

答案 1 :(得分:1)

可悲的是,因为SelectionTextSelectionLengthSelectionStart不是依赖属性,所以这两个文本框可以双向绑定在这些属性上。

您必须编写附加行为,将一个文本框附加到另一个文本框并为两者处理TextBox.SelectionChangedEvent,并在处理事件时同步另一个。