Привет Я пытаюсь привязать к свойству TextBox.CaretIndex
, который не является DependencyProperty
, поэтому я создал Behavior
, но он не работает должным образом.Как привязать к CaretIndex aka позицию курсора текстового поля
Expectation (при фокусировке)
- по умолчанию = 0
- если изменить значение в моей зрения он должен изменить значение в моей ViewModel
- если я изменить значение в моем viewmodel он должен изменить значение в моем вид
Текущее поведение
- значение ViewModel вызывается из них, когда окно открывается
Code-за
public class TextBoxBehavior : DependencyObject
{
public static readonly DependencyProperty CursorPositionProperty =
DependencyProperty.Register(
"CursorPosition",
typeof(int),
typeof(TextBoxBehavior),
new FrameworkPropertyMetadata(
default(int),
new PropertyChangedCallback(CursorPositionChanged)));
public static void SetCursorPosition(DependencyObject dependencyObject, int i)
{
// breakpoint get never called
dependencyObject.SetValue(CursorPositionProperty, i);
}
public static int GetCursorPosition(DependencyObject dependencyObject)
{
// breakpoint get never called
return (int)dependencyObject.GetValue(CursorPositionProperty);
}
private static void CursorPositionChanged(
DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
// breakpoint get never called
//var textBox = dependencyObject as TextBox;
//if (textBox == null) return;
}
}
XAML
<TextBox Text="{Binding TextTemplate,UpdateSourceTrigger=PropertyChanged}"
local:TextBoxBehavior.CursorPosition="{Binding CursorPosition}"/>
Дополнительная информация
Я думаю, что есть что-то на самом деле здесь не так, потому что мне нужно, чтобы вывести его из DependencyObject
, которая никогда не была нужна раньше, потому что CursorPositionProperty
уже DependencyProperty
, так что это должно быть достаточно. Я также думаю, что мне нужно использовать некоторые события в моем Behavior
, чтобы правильно установить мой CursorPositionProperty
, но я не знаю, какой.
** public static int GetTrackCaretIndex (DependencyObject dependencyObject) ** должен возвращать ** bool ** как это логическое свойство. + ** return (bool) dependencyObject.GetValue (TrackCaretIndexProperty); ** В противном случае вы получите _ «Строка ввода не была в правильном формате». _ Ошибка XAML. – Jedzia
@Jedzia nice catch – WiiMaxx
CursorPosition также необходимо использовать RegisterAttached – user3391859