我已經實現了基於Memento模式的撤消系統。我禁用內置撤消文本框,並想知道如何在ComboBox上做到這一點。我擁有的Combobox是可編輯的,所以它包含一個TextBox,如何訪問它以禁用它的撤消。WPF:在可編輯組合框中禁用撤消
我知道我可以從ComboBox派生添加一個屬性並覆蓋控件模板並設置TextBox上的屬性,但我想從xaml的標準組合框上執行此操作。
我已經實現了基於Memento模式的撤消系統。我禁用內置撤消文本框,並想知道如何在ComboBox上做到這一點。我擁有的Combobox是可編輯的,所以它包含一個TextBox,如何訪問它以禁用它的撤消。WPF:在可編輯組合框中禁用撤消
我知道我可以從ComboBox派生添加一個屬性並覆蓋控件模板並設置TextBox上的屬性,但我想從xaml的標準組合框上執行此操作。
你可以看看它從這樣的模板:
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;
}
我知道這是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;
}
}
}
+1,我想用'附加Property`或`Behavior`封裝此代碼提示。 – decyclone 2011-01-13 06:51:22