我已经实现了一个基于 Memento 模式的撤销系统。我禁用了 TextBox 上的内置撤消功能,并且想知道如何在 ComboBox 上执行此操作。我拥有的组合框是可编辑的,因此它包含一个文本框,我如何访问它以禁用它的撤消。
我知道我可以从 ComboBox 派生添加一个属性并覆盖控件模板并在 TextBox 上设置该属性,但我希望有一种方法可以在 xaml 的标准 ComboBox 上执行此操作。
您可以像这样从模板中查找它:
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 岁以上,但也许它会帮助某人。它基本上是瑞克作为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;
}
}
}