2

データベースから値を取得して動的に作成しているチェックボックスを含むリストボックスに複数の列が必要です。コードは次のようになります。

<StackPanel Width="250" Height="80">
<ListBox Name="listBoxZone" ItemsSource="{Binding TheList}" Height="115"    Background="Azure">
 <ListBox.ItemTemplate>
    <DataTemplate>
       <CheckBox Name="CheckBoxZone" Content="{Binding TheText}" Tag="{Binding TheValue}" Checked="CheckBoxZone_Checked" Margin="0,5,0,0"/>
     </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

しかし、ここではチェックボックスが横に次々と来ます... 5つのチェックボックスの後に列を変更したい... ここではラップパネルを使用しましたが、すべてのチェックボックスをすべて縦に並べます。

では、今何をすべきか?

4

1 に答える 1

2

これを試してください:

<ListBox Name="listBoxZone" ItemsSource="{Binding TheList}" Height="115"    Background="Azure">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}"
                        ItemWidth="{Binding (ListBox.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListBox}}"
                        MinWidth="{Binding ItemWidth, RelativeSource={RelativeSource Self}}"
                        ItemHeight="{Binding (ListBox.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListBox}}" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Name="CheckBoxZone" Content="{Binding TheText}" Tag="{Binding TheValue}" Checked="CheckBoxZone_Checked" Margin="0,5,0,0"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

このコードは、項目数が 5 に達するのではなく、コントロールの幅の境界に達するとラップします。これが要件を満たさない場合は、ListBox の代わりに Grid を使用することをお勧めします。

于 2012-05-21T10:43:38.323 に答える