1

ウィンドウがC#デスクトップアプリケーションに読み込まれるときにCheckbox、コントロールに動的にいくつかを追加したいと思います。Gridチェックボックスが表示される回数は、テーブルのエントリ数によって異なります。ここでは、LINQ To SQLクラスを使用しました。グリッドコントロールはXAMLで定義されています。

...
<Grid Name="grid1">
   <!-- here i would like to show all check box -->
</Grid>
...

ファイルの背後にあるコード:

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.Shapes;
// class declaration ...
...
private void course_Loaded(object sender, RoutedEventArgs e)
    {
        List<Course> courses = ldc.Courses.ToList();
        foreach (var c in courses)
        {
            CheckBox cb = new CheckBox();
            cb.Name=c.CourseID.ToString();
            cb.Content = c.CourseID.ToString();
            //grid1.Controls.Add(cb); does not work. what to do here?
        }
    }

このコードは機能していません。何か提案はありますか?ありがとうございました。

4

2 に答える 2

3

これらのチェックボックスをStackPanelに追加してから、StackPanelをグリッドに追加することをお勧めします。

StackPanel innerStack;

private void course_Loaded(object sender, RoutedEventArgs e)
{
    innerStack= new StackPanel 
    {
        Orientation=Orientation.Vertical
    };
    List<Course> courses = ldc.Courses.ToList();

    foreach (var c in courses)
    {
        CheckBox cb = new CheckBox();
        cb.Name = c.CourseID.ToString();
        cb.Content = c.CourseID.ToString();
        innerStack.Children.Add(cb);
    }
    Grid.SetColumn(innerStack,  /*Set the column of your stackPanel, default is 0*/);
    Grid.SetRow(innerStack,  /*Set the row of your stackPanel, default is 0*/);
    Grid.SetColumnSpan(innerStack,  /*Set the columnSpan of your stackPanel, default is 1*/);
    Grid.SetRowSpan(innerStack,  /*Set the rowSpan of your stackPanel, default is 1*/);

    Grid.Children.Add(innerStack);
}

この構造が必要ない場合は、グリッドにRowDefinitionを追加し、Grid.SetRow(cb、int)メソッドを使用してComboBoxを相互に配置する必要があります。

于 2012-12-20T04:29:52.573 に答える
1

あなたはそれを間違っています。

まず、grid1.Children.Add(cb);を実行できると言います。

次に、実際の問題は、グリッドを使用してリストを表示していることです。WPFには、チェックボックスやその他の想像できるほとんどすべてのものを含めることができる完全にスタイル設定可能な行を備えた、非常に優れたListViewがあります。

あなたのデータがどのように見えるかわからないので、ListViewであまり拡張できませんでしたが、

<ListView ItemsSource="{Binding Courses}">
     <ListView.View>
           <GridView>
                <GridViewColumn Width="120">
                      <GridViewColumnHeader>
                            <TextBlock Text="Course Name"/>
                      </GridViewColumnHeader>
                      <GridViewColumn.CellTemplate>
                           <DataTemplate>
                                <TextBlock Text="{Binding ...UFigureThisOut}"/>
                           </DataTemplate>
                      </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Width="120">
                      <GridViewColumnHeader>
                            <TextBlock Text="Take That"/>
                      </GridViewColumnHeader>
                      <GridViewColumn.CellTemplate>
                           <DataTemplate>
                                <CheckBox IsChecked="{Binding ...UFigureThisOutToo}"/>
                           </DataTemplate>
                      </GridViewColumn.CellTemplate>
                </GridViewColumn> 
           </GridView> 
     </ListView.View>
</ListView>
于 2012-12-19T21:29:07.710 に答える