我编写了一个简单的WPF应用程序,我想测试WPF TextBox提供的 Undo 方法。基本上单击“撤消”按钮时,必须还原TextBox的值。
这是我的xaml代码
<Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<TextBox Name="textBox1" />
<Button Name="button1" Click="button1_Click">Undo</Button>
<Button Name="button2" Click="button2_Click">Change value to 100</Button>
</StackPanel>
</Window>
在我的xaml.cs中,我写了以下内容:
案例1:撤销工作的地方::我点击窗口上的“将值更改为100”按钮,TextBox的文本变为100.现在我点击撤消按钮,TextBox的值变为空。
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
textBox1.Undo();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
textBox1.Text = "100";
}
}
案例2:撤销不起作用的地方::我在构造函数中将TextBox的文本值设置为100,TextBox的文本变为100.现在我点击撤消按钮,TextBox的值不会变为空! !
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
textBox1.Text = "100";
}
private void button1_Click(object sender, RoutedEventArgs e)
{
textBox1.Undo();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
}
}
为什么撤销功能不适用于第二种情况? 是因为TextBox仍未构造?但我检查了TextBox的所有属性,如Loaded,Initialized等,这些属性都设置为“True”
答案 0 :(得分:1)
我不确定技术原因,但是在之后构造函数之前,WPF中的许多控件都不会完全正常工作。但你仍然可以通过挂钩Loaded事件来解决这个问题。
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
//textBox1.Text = "100";
textBox1.Loaded += new RoutedEventHandler(textBox1_Loaded);
}
void textBox1_Loaded(object sender, RoutedEventArgs e)
{
textBox1.Text = "100";
}
private void button1_Click(object sender, RoutedEventArgs e)
{
textBox1.Undo();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
}
}
撤消按钮应该可以正常工作。