2011-12-16 130 views
1

設置WPF文本框控件的Text屬性時,其他屬性也應該更改(作爲副作用)不會更改。特別是,我想在設置Text之後檢查ExtentWidth屬性的值,但它不會改變。我試過調用UpdateLayout()無濟於事。在Windows.Forms中,我會調用DoEvents()。設置文本後更新WPF文本框屬性

好的,這是一些代碼。我把它放在Window_Loaded()事件處理程序中。問題是textBox.ExtentWidth在textBox.Text更改時不會更改。這並不令我感到驚訝。我想我需要調用像textBox.UpdateLayout(),以重新計算ExtentWidth,但沒有幫助。 ExtentWidth確實取決於我在Window的構造函數中初始化textBox.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.0? – Maheep 2011-12-16 04:39:54

回答

1

我發現了一個解決方案,在設置文本後變更TextBox.ExtentWidth的特定問題。設置文本將提高LayoutUpdated事件,並且您可以在LayoutUpdated的處理程序中獲取新值ExtentWidth

我用這個事實來創建WPF TextBox的子類,當文本對於可見區域太長時,顯示省略號。我寫了一篇關於它的CodeProject文章here