为什么如果在构造函数中初始化值,WPF TextBox的Undo方法不起作用?

时间:2012-01-30 04:27:28

标签: .net wpf textbox undo

我编写了一个简单的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”

1 个答案:

答案 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)
    {
    }
}

撤消按钮应该可以正常工作。