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之间有一些主要的区别,它们会改变你解决问题的方式。 –