如何覆盖TextProperty
元数据以设置UpdateSourceTrigger.PropertyChanged
默认情况下使用基础TextBox
类
TextBox.OnTextPropertyChanged
TextBox.CoerceText
方法,当两者都是私有的时候?
public class MyTextBox : System.Windows.Controls.TextBox
{
static MyTextBox()
{
TextProperty.OverrideMetadata(typeof(TextBox), new FrameworkPropertyMetadata(
string.Empty, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(TextBox.OnTextPropertyChanged),
new CoerceValueCallback(TextBox.CoerceText), true, UpdateSourceTrigger.PropertyChanged));
...
答案 0 :(得分:3)
您应该能够使用GetDefaultMetadata方法,该方法可以访问引用私有方法的回调。
以下对我有用:
public class MyTextBox : TextBox
{
static MyTextBox()
{
var defaultMetadata = TextBox.TextProperty.GetMetadata(typeof(TextBox));
TextBox.TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(
string.Empty, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
defaultMetadata.PropertyChangedCallback,
defaultMetadata.CoerceValueCallback,
true,
System.Windows.Data.UpdateSourceTrigger.PropertyChanged));
}
}