2011-12-16 10 views
1

WPF TextBoxコントロールのTextプロパティを設定すると、変更する必要があるその他のプロパティも変更されません。特に、Textを設定した後にExtentWidthプロパティの値をチェックしたいが、変更はしない。 UpdateLayout()を無駄に呼び出そうとしました。 Windows.FormsではDoEvents()を呼び出します。テキストを設定した後にWPF TextBoxプロパティを更新する

OK、ここにいくつかのコードがあります。私はこれをWindow_Loaded()イベントハンドラに入れます。問題は、textBox.Textが変更されたときにtextBox.ExtentWidthが変更されないことです。それは本当に私を驚かせません。私はExtentWidthを再計算するためにtextBox.UpdateLayout()のようなものを呼び出す必要があると思っていますが、それは役に立ちませんでした。 ExtentWidthは、textBox.TextをWindowのコンストラクタに初期化することによって異なりますが、それは私を助けません。いくつかの異なる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

+2

これにいくつかのコードを追加して、あなたが見ているものを見ることができます。 – Xcalibur37

+0

ActualWidthは、wpfコントロールの実際の幅を示します。いくつかのコードはあなたを助けるのに役立ちます:) – blindmeis

答えて

1

テキストを設定した後にTextBox.ExtentWidthが変更されるという特定の問題の解決策が見つかりました。テキストを設定するとLayoutUpdatedイベントが発生し、のハンドラで新しい値ExtentWidthを取得できます。

私はこの事実を使って、可視領域に対してテキストが長すぎる場合に省略記号を表示するWPF TextBoxのサブクラスを作成しました。私はそれについてCodeProjectの記事を書いたhere

関連する問題