出于某种目的,我想在多行文本框的 LineCount
发生变化时引发一个事件
我想如果我将依赖属性绑定(bind)到 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
的绑定(bind)从 TextBox 的 LineCount
更改为 Text
每次文本更改时都会触发 PropertyChangedEvent。
我确信我可以从 TextChanged 事件处理程序触发一些自定义 LineCount 更改事件,但我想通过 DepedencyProperties
来执行此操作,因为我相信它会更有效。
最佳答案
问题是 LineCount
不是依赖属性,请参阅 MSDN documentation 。因此它不支持绑定(bind)并且不会提供更改通知。
考虑到您正在制作自定义控件,您真的需要使用绑定(bind)吗?为什么不直接在内部处理 TextChanged
事件并手动检测行数何时发生变化。
关于wpf - 如何将属性绑定(bind)到 WPF 中的仅 getter CLR 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112663/