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.

¿Fue útil?

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;
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top