WPF中的Control.Text

时间:2013-07-02 13:44:54

标签: c# wpf winforms visual-studio-2012 controls

目前我正在将我的一个程序从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函数,允许我编辑任何文本控制(文本框,标签等)以相同的方式?

1 个答案:

答案 0 :(得分:1)

WPF中有多种不同的内容模型。 MSDN有一个很好的入门书。

话虽如此,使用DependencyProperty可以做的一件很酷的事情是DependencyObject设置它可能不关心它。你可以这样做:

c.SetValue(TextBlock.TextProperty, text);
c.SetValue(ContentControl.ContentProperty, text);

这将涵盖显示内容的大多数控件。