0

目前我正在将我的一个程序从 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 命令,如果控件专门是 WPF 标签,则可以调用 c.Content 命令。但是,我不能像这里一样为通用控件 c 调用其中任何一个。是否有任何方法或命令可用于设置控件 c 的 Text 值,或者是否有其他方法可以修改代码,以便我仍然可以设置允许我编辑任何文本的 SetText 函数以相同的方式控制(文本框、标签等)?

4

1 回答 1

1

WPF 中有多种不同的内容模型。MSDN对它们有很好的入门知识。

话虽如此,你可以用 a 做的一件很酷的事情DependencyProperty是将它设置在一个DependencyObject可能不关心它的地方。因此,您可以这样做:

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

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

于 2013-07-02T13:51:27.577 回答