设置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
答案 0 :(得分:1)
我找到了设置文本后让TextBox.ExtentWidth
更改的具体问题的解决方案。设置文本会引发LayoutUpdated
事件,您可以在ExtentWidth
的处理程序中获取LayoutUpdated
的新值。
我使用这个事实来创建WPF TextBox
的子类,当文本对于可见区域来说太长时,它会显示省略号。我写了一篇关于它的CodeProject文章here。