我已经实现了一个基于Memento模式的撤销系统。我禁用TextBox上的内置撤消,并想知道如何在ComboBox上执行此操作。我有的Combobox是可编辑的,因此它包含一个TextBox,如何访问它以禁用它上的撤消。
我知道我可以从ComboBox派生添加属性并覆盖控件模板并在TextBox上设置属性,但我想在xaml的标准ComboBox上执行此操作。
答案 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;
}
}
}