Обработка курсора внутри текстового поля - PullRequest
0 голосов
/ 11 июня 2009

У меня было свойство курсора в моей модели представления, которое определяет положение курсора в текстовом поле в представлении. Как я могу привязать свойство курсора к фактической позиции курсора внутри текстового поля.

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Боюсь, что вы не можете ... по крайней мере, не напрямую, поскольку в элементе управления TextBox нет свойства CursorPosition.

Вы можете обойти эту проблему, создав DependencyProperty в code-behind, привязанном к ViewModel и обработав положение курсора вручную. Вот пример:

/// <summary>
/// Interaction logic for TestCaret.xaml
/// </summary>
public partial class TestCaret : Window
{
    public TestCaret()
    {
        InitializeComponent();

        Binding bnd = new Binding("CursorPosition");
        bnd.Mode = BindingMode.TwoWay;
        BindingOperations.SetBinding(this, CursorPositionProperty, bnd);

        this.DataContext = new TestCaretViewModel();
    }



    public int CursorPosition
    {
        get { return (int)GetValue(CursorPositionProperty); }
        set { SetValue(CursorPositionProperty, value); }
    }

    // Using a DependencyProperty as the backing store for CursorPosition.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty CursorPositionProperty =
        DependencyProperty.Register(
            "CursorPosition",
            typeof(int),
            typeof(TestCaret),
            new UIPropertyMetadata(
                0,
                (o, e) =>
                {
                    if (e.NewValue != e.OldValue)
                    {
                        TestCaret t = (TestCaret)o;
                        t.textBox1.CaretIndex = (int)e.NewValue;
                    }
                }));

    private void textBox1_SelectionChanged(object sender, RoutedEventArgs e)
    {
        this.SetValue(CursorPositionProperty, textBox1.CaretIndex);
    }

}
0 голосов
/ 30 июня 2009

Вы можете использовать свойство CaretIndex. Однако это не DependencyProperty и, по-видимому, не реализует INotifyPropertyChanged, поэтому вы не можете с ним связываться.

...