目前我正在将我的一个程序从WinForms转换为WPF。我遇到的第一个问题涉及在WPF中设置控件的文本值。在我的WinForms程序中,我有一个看起来像这样的代码:
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部分阅读的内容后发现的是,如果控件是专门的WPF文本框,那么我可以调用c.Text命令,如果控件是专门的,则可以调用c.Content命令WPF标签。但是,我不能将这些中的任何一个称为通用控件,就像我在这里一样。是否有任何方法或命令可用于设置我的控件c的Text值,或者是否有其他方法可以修改代码以便我仍然可以设置我的SetText函数,允许我编辑任何文本控制(文本框,标签等)以相同的方式?
答案 0 :(得分:1)
WPF中有多种不同的内容模型。 MSDN有一个很好的入门书。
话虽如此,使用DependencyProperty
可以做的一件很酷的事情是DependencyObject
设置它可能不关心它。你可以这样做:
c.SetValue(TextBlock.TextProperty, text);
c.SetValue(ContentControl.ContentProperty, text);
这将涵盖显示内容的大多数控件。