Как добавить вложенное свойство в комбинированный список?

1

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, я получаю ошибку "Объект ссылка не установлена в экземпляр объекта" в окне ошибки. Если я запустил приложение, он просто сбой с первым шансом, показывающим одно и то же сообщение.

Любая подсказка о том, как заставить его работать?

  • 0
    @Предложите, как один объект может быть одновременно ComboBox и TextBox ? Вы должны проверить , если textBox или comboBox не равны нулю , и если comboBox не равно нулю , то textBox будет
Показать ещё 4 комментария
Теги:
xaml
wpf

1 ответ

1
Лучший ответ

Вы должны проверить, имеет ли 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;
    }
  • 0
    это все равно вызовет исключение нулевой ссылки, потому что, если это ComboBox тогда textBox , на который вы ссылаетесь в секунду if, будет нулевым. Это не может быть как ComboBox и TextBox
  • 0
    это не должно вызывать исключение нулевой ссылки, каждый проверяется на нулевое значение перед доступом к нему.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню