Hie. В настоящее время у меня есть прикрепленное свойство, которое я использую для получения информации из TextBoxes и, если нужно, изменяю его. Однако он работает только с текстовыми полями, что означает, что с ним нельзя использовать элементы управления пользователями, такие как ComboBoxes и DatePickers. Я не совсем уверен, где его изменить, чтобы заставить его работать с ними. Здесь класс ниже.
public class TextBoxProperties
{
public static readonly DependencyProperty IsTextFormattedProperty = DependencyProperty.RegisterAttached("IsTextFormatted", typeof(bool), typeof(TextBoxProperties ), new UIPropertyMetadata(default(bool), OnIsTextFormattedChanged));
public static bool GetIsTextFormatted(DependencyObject dependencyObject)
{
return (bool)dependencyObject.GetValue(IsTextFormattedProperty);
}
public static void SetIsTextFormatted(DependencyObject dependencyObject, bool value)
{
dependencyObject.SetValue(IsTextFormattedProperty, value);
}
public static void OnIsTextFormattedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
TextBox textBox = dependencyObject as TextBox;
ComboBox comboBox = dependencyObject as ComboBox;
// This will work fine...
if (textBox.Name == "firstNameTextBox")
{
bool newIsTextFormattedValue = (bool)dependencyPropertyChangedEventArgs.NewValue;
if (newIsTextFormattedValue) textBox.TextChanged += MyTextBoxChangedHandler;
else textBox.TextChanged -= MyTextBoxChangedHandler;
}
// This on the other hand will not
if (comboBox.Name == "genderTextBox")
{
bool newIsTextFormattedValue = (bool)dependencyPropertyChangedEventArgs.NewValue;
if (newIsTextFormattedValue) textBox.TextChanged += MyComboBoxChangedHandler;
else textBox.TextChanged -= MyComboBoxChangedHandler;
}
}
public static void MyTextBoxChangedHandler(object sender, TextChangedEventArgs e)
{
// Do what ever needs to be done with text...
}
public static void MyComboBoxChangedHandler(object sender, TextChangedEventArgs e)
{
// Do what ever needs to be done with text...
}
При использовании этого я просто помещаю это в представление xaml:
<TextBox TextBoxProperties:IsFormatted="True" ... />
<ComboBox TextBoxProperties:IsFormatted="True" ... />
Как всегда Когда когда-либо добавляю Attached Property в comboBox, я получаю ошибку "Объект ссылка не установлена в экземпляр объекта" в окне ошибки. Если я запустил приложение, он просто сбой с первым шансом, показывающим одно и то же сообщение.
Любая подсказка о том, как заставить его работать?
Вы должны проверить, имеет ли textbo значение null, а также combobox:
TextBox textBox = dependencyObject as TextBox;
ComboBox comboBox = dependencyObject as ComboBox;
if (textBox != null && textBox.Name == "firstNameTextBox")
{
bool newIsTextFormattedValue = (bool)dependencyPropertyChangedEventArgs.NewValue;
if (newIsTextFormattedValue) textBox.TextChanged += MyTextChangedHandler;
else textBox.TextChanged -= MyTextChangedHandler;
}
if (comboBox != null && comboBox.Name == "genderTextBox")
{
bool newIsTextFormattedValue = (bool)dependencyPropertyChangedEventArgs.NewValue;
if (newIsTextFormattedValue) comboBox.SomeEvent += MyComboBoxChangedHandler;
else comboBox.SomeEvent -= MyComboBoxChangedHandler;
}
ComboBox
тогда textBox
, на который вы ссылаетесь в секунду if, будет нулевым. Это не может быть как ComboBox
и TextBox
ComboBox
иTextBox
? Вы должны проверить , еслиtextBox
илиcomboBox
не равны нулю , и еслиcomboBox
не равно нулю , тоtextBox
будет