2017-10-04 144 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

也許是因爲你「添加'它的狀態欄,而不是'清除'它?代碼沒有說明舊的項目應該被清除或刪除,所以他們自然停留。 – CShark

+0

@CShark啊,這是有道理的。謝謝! – asa

+0

@asa爲什麼要手動添加TextBlock?在xaml中添加TextBlock並更新代碼中的Text會容易得多。 – Valerii

回答

1

您正在增加新的TextBlockStatusBar而不清除其項目。嘗試添加一個新的前清理物品:

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

然而,一個更好的解決辦法是重新使用相同的TextBlock,而不是添加&清除它:

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

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

剛剛發現這件事。謝謝 – asa

+1

@asa甚至更好;綁定文本並在視圖模型中進行更新...... – BradleyDotNET

+0

'{綁定}'將會是更好的解決方案。然而,OP似乎正在研究看起來像WinForms的東西。 – Xiaoy312