2017-10-04 5 views
1

私のプログラムは、テキストボックス内の文字数と行数を追跡します。この情報をユーザーに表示するステータスバーを作成しようとしています。問題は、ステータスバーが更新されたときに古い情報が置き換えられるのではなく、単にその行に追加されるということです。ステータスバーを更新するには?

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    int numChars = TextBox.Text.Length; 
    int numLines = TextBox.LineCount; 
    TextBlock statusText = new TextBlock(); 

    statusText.Text = "Line " + (numLines) + ", Char " + (numChars); 
    Status.Items.Add(statusText); 
} 
+0

をたぶん、あなたは「追加ので:

Status.Items.Clear(); Status.Items.Add(statusText); 

は、しかし、より良い解決策ではなく、それをクリア&を追加するので、同じTextBlockを再利用することです'それを最初にクリアするのではなく、ステータスバーに表示しますか?このコードでは、古いアイテムは消去または削除する必要があるので、自然に残ります。 – CShark

+0

@CSharkああ、意味があります。ありがとう! – asa

+0

@asaなぜTextBlockを手動で追加しますか? TextBlockをxamlに追加するだけで、コード内のTextを更新するほうがはるかに簡単です。 – Valerii

答えて

1

あなたは、その項目をクリアせずにStatusBarに新しいTextBlockを追加しています。新しいものを追加する前に、項目をクリアしてみてください。

// xaml: 
<StatusBar> 
    <StatusBarItem> 
     <TextBlock Name="status" /> 
    </StatusBarItem> 
</StatusBar> 

// code behind: 
status.Text = "..."; 
+0

ちょうどこれについて知りました。ありがとうございます – asa

+1

@asaまたはさらに良い;ビュー・モデルでテキストをバインドして更新してください。 – BradleyDotNET

+0

'{バインディング}'は確実に良い解決策になります。しかし、OPはWinFormsを連想させるように見えるものに取り組んでいるようです。 – Xiaoy312

関連する問題