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;
}
}
}