您好,我正在尝试绑定到TextBox.CaretIndex
属性,但它不是一个DependencyProperty
,所以我创建了一个Behavior
,但它的效果不如预期。
期望(当获取焦点时)
- 默认值为0
- 如果我在视图中更改该值,则应更改我的视图模型中的值
- 如果我在视图模型中更改该值,则应更改我的视图中的值
当前行为
- 当窗口打开时,会调用视图模型值一次
代码后台
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
,但我不知道要用哪些。