0

現在、プログラムの 1 つを 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には、それらに関する優れた入門書があります。

そうは言っても、 でできるクールなことは、それを気にしないDependencyPropertyに設定することです。DependencyObjectしたがって、次のことができます。

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

これは、コンテンツを表示するほとんどのコントロールをカバーします。

于 2013-07-02T13:51:27.577 に答える