WPF: Desactivar Deshacer en un componente ComboBox editable
Pregunta
He implementado un sistema de deshacer basado en el patrón Memento. Cómo desactivo el construido en Deshacer en Cuadro de texto y se preguntaba cómo hacer esto en un cuadro combinado. El cuadro combinado que tengo es editable, por lo que contiene un cuadro de texto, ¿cómo puedo acceder a esta opción para desactivar el Deshacer en él también.
Sé que puedo derivar de ComboBox agregar una propiedad y anular la plantilla de control y establecer la propiedad en el cuadro de texto, pero me gustaría una manera de hacer esto en el cuadro combinado estándar desde el XAML.
Solución
Se puede mirar hacia arriba a partir de la plantilla de la siguiente manera:
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;
}
Otros consejos
Sé que esto es más de 3 años de edad, pero tal vez voy a ayudar a alguien. Es básicamente la respuesta de Rick como behavoir que decyclone mencionó:
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;
}
}
}