C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WPFのDockPanelが描画されない

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■83087 / inTopicNo.1)  WPFのDockPanelが描画されない
  
□投稿者/ P2AP (2回)-(2017/03/06(Mon) 05:13:15)

分類:[.NET 全般] 

環境
Microsoft Visual Studio Community 2015
Microsoft Visual C# 2015

いつもお世話になっております。

動的にコントロールを追加したいと思っています。
具体的には、メインとなるDockPanelに、
ボタンやテキストボックスが格納されたDockPanelを順次格納したいと思っています。

テストとして以下のコードを記述し、実行したのですが、描画されません。
想定では"Test"という文字列が10、表示されるという認識です。
蛇足かもしれませんが、非同期で行っているので、
Application.Current.Dispatcher.Invokeを使用しています。

var list = new List<DockPanel>();
for (int i = 0; i < 10; i++)
{
    list.Add(new DockPanel());
    list[i].Children.Add(new TextBlock() { Text = "Test", Width = 494, Height = 19 });
    list[i].Height = 100;
    list[i].Width = 100;
    Application.Current.Dispatcher.Invoke(new Action(() => { this.spMain.Children.Add(list[i]); }));
}

何かご存じの方いらっしゃれば、ご指導のほどお願いしたく思います。

引用返信 編集キー/
■83088 / inTopicNo.2)  Re[1]: WPFのDockPanelが描画されない
□投稿者/ Hongliang (506回)-(2017/03/06(Mon) 06:23:40)
> 蛇足かもしれませんが、非同期で行っているので、
> Application.Current.Dispatcher.Invokeを使用しています。
単に例外が出ているのをどこかで握りつぶしているだけと言うことはありませんか?
WPFでは、基本的にスレッド間でUIオブジェクトを受け渡しはできません。別スレッドではUIオブジェクトを生成する元となるデータを生成し、UIスレッドがそのデータを参照してUIを構築する形になります。
で、そのうちのUI部分を一般化したのがItemsControlとDataTemplateです。
ItemsControl.ItemsPanelで使用するパネルをDockPanelに差し替えることもできます。
引用返信 編集キー/
■83113 / inTopicNo.3)  Re[2]: WPFのDockPanelが描画されない
□投稿者/ P2AP (3回)-(2017/03/07(Tue) 07:47:04)
No83088 (Hongliang さん) に返信
>>蛇足かもしれませんが、非同期で行っているので、
>>Application.Current.Dispatcher.Invokeを使用しています。
> 単に例外が出ているのをどこかで握りつぶしているだけと言うことはありませんか?
> WPFでは、基本的にスレッド間でUIオブジェクトを受け渡しはできません。別スレッドではUIオブジェクトを生成する元となるデータを生成し、UIスレッドがそのデータを参照してUIを構築する形になります。
> で、そのうちのUI部分を一般化したのがItemsControlとDataTemplateです。
> ItemsControl.ItemsPanelで使用するパネルをDockPanelに差し替えることもできます。

回答ありがとうございます。
未だ詳しく検証出来ていないのですが、例外は無いように思えます。(まだ解決出来ておりません)
WPF関連のドキュメントを読み込もうと思います。
またお伺いするかもしれません。ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ