【问题标题】:Updating WPF TextBox properties after setting Text设置文本后更新 WPF 文本框属性
【发布时间】:2011-12-16 04:12:48
【问题描述】:

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

好的,这里有一些代码。我把它放在 Window_Loaded() 事件处理程序中。问题是 textBox.ExtentWidth 在 textBox.Text 更改时不会更改。这并不让我感到惊讶。我想我需要调用类似 textBox.UpdateLayout() 的方法来重新计算 ExtentWidth,但这并没有帮助。 ExtentWidth 确实取决于我在窗口的构造函数中初始化 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.0吗?
  • 请在此处添加一些代码,以便我们看到您正在查看的内容。
  • ActualWidth 为您提供 wpf 控件的实际宽度。但是一些代码会帮助你:)
  • “设置”是什么意思?从TextBox 或TextChanged 事件导航后? ;)
  • 在这里操作。我添加了一些代码来说明我的问题。

标签: wpf textbox


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2012-05-15
    相关资源
    最近更新 更多