WPF:在可编辑的ComboBox中禁用撤消

时间:2011-01-13 05:37:14

标签: c# wpf combobox undo memento

我已经实现了一个基于Memento模式的撤销系统。我禁用TextBox上的内置撤消,并想知道如何在ComboBox上执行此操作。我有的Combobox是可编辑的,因此它包含一个TextBox,如何访问它以禁用它上的撤消。

我知道我可以从ComboBox派生添加属性并覆盖控件模板并在TextBox上设置属性,但我想在xaml的标准ComboBox上执行此操作。

2 个答案:

答案 0 :(得分:4)

您可以从模板中查找:

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

答案 1 :(得分:0)

我知道这已经3年多了,但也许它可以帮助别人。这基本上是Rick作为decyclone提到的行为的答案:

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