问题
How to override the TextProperty
Metadata to set the UpdateSourceTrigger.PropertyChanged
by default while using the functionality from the base TextBox
Class
TextBox.OnTextPropertyChanged
TextBox.CoerceText
methods, when both mentioned are private ?
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));
...
回答1:
You should be able to use the GetDefaultMetadata method which will give you access to the callbacks that refer to the private methods.
The following worked for me:
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));
}
}
来源:https://stackoverflow.com/questions/2763431/wpf-textbox-textproperty-metadata-override