2011-01-13 47 views
1

我已经实现了基于Memento模式的撤消系统。我禁用内置撤消文本框,并想知道如何在ComboBox上做到这一点。我拥有的Combobox是可编辑的,所以它包含一个TextBox,如何访问它以禁用它的撤消。WPF:在可编辑组合框中禁用撤消

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

回答

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

+1,我想用'附加Property`或`Behavior`封装此代码提示。 – decyclone 2011-01-13 06:51:22

0

我知道这是3+岁,但也许它会帮助别人。它基本上是里克的回答为Behavoir是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; 
     } 
    } 
}