2011-01-13 53 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; 
     } 
    } 
}