出于某种目的,我想在多行文本框的LineCount
发生变化时提出事件
我认为如果将依赖属性绑定到TextBox.LineCount
,我可以实现此目的
以下是代码示例
XAML
<local:MyTextBox Margin="5,65,5,5" x:Name="txtBox"
AcceptsReturn="True" AcceptsTab="False"
MyProperty="{Binding LineCount, RelativeSource={RelativeSource Self}}" />
代码隐藏
public class MyTextBox : TextBox
{
public MyTextBox()
{
DataContext = this;
}
public int MyProperty
{
get
{
return (int)this.GetValue(LineCountProperty);
}
set
{
this.SetValue(LineCountProperty, value);
}
}
public static readonly DependencyProperty LineCountProperty =
DependencyProperty.Register(
"MyProperty",
typeof(int),
typeof(TextBox),
new FrameworkPropertyMetadata(
new PropertyChangedCallback(
(dp, args) => { MessageBox.Show(args.NewValue.ToString()); })
));
}
仅在加载表单时显示消息框,而不是在行计数更改后显示消息框。
但是,如果我将MyProperty
的绑定从TextBox的LineCount
更改为Text
每次文本更改时都会触发PropertyChangedEvent。
我相信我可以从TextChanged事件处理程序中激活一些自定义的LineCount更改事件,但我希望通过DepedencyProperties
执行此操作,因为我相信它会更有效。
答案 0 :(得分:2)
问题是LineCount
不是依赖属性,请参阅MSDN documentation。因此,它不支持绑定,也不会提供更改通知。
考虑到您正在制作自定义控件,您真的需要使用绑定吗?为什么不在内部处理TextChanged
事件并检测行数何时手动更改。