0
目前我正在將我的一個程序從WinForms轉換爲WPF。我遇到的第一個問題涉及到在WPF中設置控件的文本值。在我的WinForms項目,我已經工作的代碼看起來像這樣:WPF中的Control.Text
delegate void SetTextCallback(Control c, string text);
private void SetText(Control c, string text)
{
if (c.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] {c, text});
}
else
{
c.Text = text; //This is where I have not found a way to replicate.
}
}
我已經改變了一些事情讓一部分工作,但到目前爲止,這是我在WPF中,似乎除了工作我實際上試圖設置控件文本的部分。
delegate void SetTextCallback(Control c, string text);
private void SetText(Control c, string text)
{
if (c.Dispatcher.CheckAccess())
{
SetTextCallback d = new SetTextCallback(SetText);
this.Dispatcher.Invoke(d, new object[] {c, text});
}
else
{
c.Text = text;
}
}
從我在這個網站和MSDN段閱讀的東西后發現是,我可以調用c.Text命令,如果控制得特別WPF的文本框,然後c.Content命令,如果控制是特別的WPF標籤。但是,我不能像我這裏那樣調用其中的任何一個通用控件。是否有任何方法或命令可以用來設置我的控件c的Text值,還是有另一種方法可以修改代碼,以便我仍然可以設置SetText函數,該函數允許我編輯任何文本用相同的方式控制(文本框,標籤等)?
@ VarnerBeast14對不起,我用正確的靜態字段更新了答案。我忘了在最後添加該屬性。 'ContentControl'和'TextBlock'都在'System.Windows.Controls'中。我也錯了,你可以設置TextElement.TextProperty,因爲TextElement只定義了文本格式屬性,而不是它們的內容屬性。 –
我現在擁有它。我不確定它是否會像我需要的那樣工作,但至少它沒有錯誤地接受它。如果它有效,我會回來並將其標記爲答案。 – VarnerBeast14
@ VarnerBeast14我應該指出的一點是,因爲你傳遞了'Control',所以你將永遠不會有'TextBlock',因爲它是從'FrameworkElement'派生出來的。你真的可能想問一個關於你想要完成的事情的問題,而不是你特定的實現細節。 WPF和WinForms之間有一些主要的區別,它們會改變你解決問題的方式。 –