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" ... />
Как всегда когда я когда-либо добавить вложенное свойство к COMBOBOX, я получаю «ссылка на объект не указывает на экземпляр ошибки объекта в окне ошибки. Если я запустил приложение, он просто сбой с первым шансом, показывающим одно и то же сообщение.
Любая подсказка о том, как заставить его работать?
если (! COMBOBOX = нуль) и [Что такое NullReferenceException и как это исправить?] (HTTP: // StackOverflow .com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Mark
@Offer Как один объект может быть как 'ComboBox', так и' TextBox'? Вы должны проверить, не являются ли 'textBox' или' comboBox', и если 'comboBox' не является нулевым, то' textBox' будет – dkozl
, аргумент 'dependencyObject' может быть только одного типа, поэтому вам нужно сначала проверить тип, если кастинг с использованием 'as', убедитесь, что результат не равен нулю. –