1

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

我知道我可以从 ComboBox 派生添加一个属性并覆盖控件模板并在 TextBox 上设置该属性,但我希望有一种方法可以在 xaml 的标准 ComboBox 上执行此操作。

4

2 回答 2

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;
}
于 2011-01-13T05:58:27.583 回答
0

我知道这是 3 岁以上,但也许它会帮助某人。它基本上是瑞克作为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;
        }
    }
}
于 2014-03-24T20:05:24.183 回答