设置Text后更新WPF TextBox属性

时间:2011-12-16 04:12:49

标签: wpf textbox

设置WPF TextBox控件的Text属性时,其他也应更改的属性(作为副作用)不会更改。特别是,我想在设置Text后检查ExtentWidth属性的值,但它不会改变。我试过调用UpdateLayout()无济于事。在Windows.Forms中,我会调用DoEvents()。

好的,这是一些代码。我把它放在Window_Loaded()事件处理程序中。问题是当textBox.Text更改时textBox.ExtentWidth不会更改。这并不让我感到惊讶。我想我需要调用类似textBox.UpdateLayout()的东西来重新计算ExtentWidth,但这没有帮助。 ExtentWidth会根据我在Window的构造函数中初始化textBox.Text的内容而有所不同,但这对我没有帮助。我需要设置几个不同的Text值,并为每个值获取相应的ExtentWidth。

   string initText = textBox.Text;   // "textBox"
   double extentWidth = textBox.ExtentWidth; // 39.3

   textBox.Text = "short text";
   extentWidth = textBox.ExtentWidth;  // 39.3

   textBox.Text = "Long enough to make a difference, eh?";
   extentWidth = textBox.ExtentWidth;  // 39.3

1 个答案:

答案 0 :(得分:1)

我找到了设置文本后让TextBox.ExtentWidth更改的具体问题的解决方案。设置文本会引发LayoutUpdated事件,您可以在ExtentWidth的处理程序中获取LayoutUpdated的新值。

我使用这个事实来创建WPF TextBox的子类,当文本对于可见区域来说太长时,它会显示省略号。我写了一篇关于它的CodeProject文章here