- 題名: WPFでチェックボックスを.csだけで作成するにはどうしたらよいですか?
- 日時: 2009/11/15 20:03:05
- ID: 25816
- この記事の返信元:
- (なし)
- この記事への返信:
- [25817] Re[1]: WPFでチェックボックスを.csだけで作成するにはどうしたらよいですか?2009/11/15 20:42:30
- ツリーを表示
■No25817に返信(Hongliangさんの記事) Hongliangさま、早速ご回答ありがとうございました。 コード的には正しいとのこと。とするとその前後で間違っているのでしょうか。 Window1.xmal.csの全コードは次のようになっています。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication1 { /// <summary> /// Window1.xaml の相互作用ロジック /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); string[] lines = { "りんご", "柿" }; StackPanel panel = new StackPanel(); foreach (string line in lines) { CheckBox checkbox = new CheckBox(); checkbox.Content = line; panel.Children.Add(checkbox); } Window Window1 = new Window(); Window1.Content = panel; //Application application = new Application(); //application.Run(Window1); } } } さきほど、これでウィンドウは開くと書いたのですが、それは、 //Application application = new Application(); //application.Run(Window1); の2行をコメントアウトした、現在の場合でした。 この2行があると、 アセンブリ 'WpfApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' で定義された 'Window1' のインスタンスを作成できません。 呼び出しのターゲットが例外をスローしました。 マークアップ ファイル 'Window1.xaml' 行 1 位置 9 にエラーがあります。 というエラーが出てしまいます。 application.Runというのは、WPFでないC#のほうでは、 Program.csファイルのmainに書くと思うので、 このコードはすべてmainに書けばよいと思うのですが、 WPFの場合は、ソリューションエクスプローラーのなかにProgram.csが存在しないので、 とりあえずWindow1.xaml.csに書いています。 そのあたりが間違っている気がするのですが、 どう修正したらよいのか、よくわからないのです。
string[] lines = { "りんご", "柿" }; StackPanel panel = new StackPanel(); foreach (string line in lines) { CheckBox checkbox = new CheckBox(); checkbox.Content = line; panel.Children.Add(checkbox); } this.Content = panel; として解決しました。ありがとうございました。 さらに引き続き疑問点が残ります。 おっしゃるとおりで、WPFは(それほど詳しいとはとうていいえないのですが)、 xamlとバインディングでいろいろプログラムを書くようです。 xamlは、xmlに似ているので、固定的なものを書くのには都合がよいようです。 で、今回なぜcsを使いxamlを使わないかというと、このソフトはチェックリストの試作品であるためです。 linesは実際にはファイルから読むので、不特定多数なのでxamlには書けないのです。 string[] lines = { "りんご", "柿" }; のこともあるし、 string[] lines = { "りんご", "柿", "ぶどう", "バナナ" }; のこともあるわけです。 こういう作業にはどうやらバインディングを使うらしい、 そういうことならバインディングだ、ということは、 WPFの本を4冊脇において眺めていてわかったのですが、 まだバインディングの基本を理解できておらず、使えないためです…。 今回バインディングを理解しながら書くのもありだと思うのですが…。 いまのところ上記のようにぜんぜん理解できていないので、 書くとすると、ぜんぶ教えてになっちゃいます…。 さて、それで疑問点というと、この位置の調整です。 このpanelの位置をウィンドウ内のたとえば左から50ピクセル、 上から30ピクセルに表示するにはどうしたらよいでしょう? panel.Leftとか、panel.Topとかのプロパティがあるのかと思ったら、見当たりませんでした。 それではxmalでと思って、StackPanelを配置して、 <StackPanel Margin="50,30,12,98" Name="stackPanel1" /> string[] lines = { "りんご", "柿" }; //StackPanel panel = new StackPanel(); foreach (string line in lines) { CheckBox checkbox = new CheckBox(); checkbox.Content = line; //panel.Children.Add(checkbox); stackPanel1.Children.Add(checkbox); } this.Content = stackPanel1; としたところ、 この最後の行で、 アセンブリ 'WpfApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' で定義された 'Window1' のインスタンスを作成できません。 呼び出しのターゲットが例外をスローしました。 マークアップ ファイル 'Window1.xaml' 行 1 位置 9 にエラーがあります。 とエラーになっています。 できれば配置はレイアウトを自由に設定できるxamlでと考えているので、 csにこだわらずアドバイスいただければと。 重ねてですみませんが、よろしくお願いします。
分類:[.NET]