WPF: отключить отмену в редактируемом ComboBox

Я реализовал систему отмены, основанную на шаблоне Memento. Я отключил встроенную функцию отмены в TextBox, и мне было интересно, как это сделать в ComboBox. Имеющийся у меня комбинированный список является редактируемым, поэтому он содержит текстовый блок, как мне получить к нему доступ, чтобы отключить отмену на нем.

Я знаю, что я могу извлечь из ComboBox добавить свойство, переопределить шаблон элемента управления и установить свойство в TextBox, но я хотел бы сделать это в стандартном ComboBox из xaml.

2 ответа

Решение

Вы можете посмотреть это из шаблона следующим образом:

public Window1()
{
    this.InitializeComponent();

    comboBox1.Loaded += new RoutedEventHandler(comboBox1_Loaded);
}

void comboBox1_Loaded(object sender, RoutedEventArgs e)
{
    var textBox = comboBox1.Template.FindName("PART_EditableTextBox", comboBox1) as TextBox;
}

Я знаю, что это 3+ лет, но, возможно, это кому-то поможет. В основном ответ Рика как поведения, о котором говорил дециклон:

public class ComboBoxDisableUndoBehavoir : Behavior<ComboBox>
{
    public ComboBoxDisableUndoBehavoir()
    {
    }

    protected override void OnAttached()
    {
        if (AssociatedObject != null)
        {
            AssociatedObject.Loaded += AssociatedObject_Loaded;
        }
        base.OnAttached();
    }

    void AssociatedObject_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        var tb = AssociatedObject.Template.FindName("PART_EditableTextBox", AssociatedObject) as TextBox;
        if (tb != null)
        {
            tb.IsUndoEnabled = false;
        }
    }
}
Другие вопросы по тегам