2011-01-18 22 views
12

私はチェックボックスを含むListBox(WPF)を持っています。私は設定画面で使用しています。以下の模式例:WPFリストボックスのレイアウト:複数の列

alt text

今私は "テスト5" チェックボックスを追加します。私は垂直方向のスペースが限られているので、私は以下に示すように、それは、水平方向に表示する:

alt text

チェックボックスは次のように配置されるように、リストボックスのレイアウトを変更することはできますか?

+0

おそらくリストボックスでこれを行うことができますが、WrapPanelを使用しないのはなぜですか?あなたは本当にSelectedItemが必要ですか? –

+0

@Henk、 'WrapPanel'を' ListBox'の 'ItemsPanel'として設定します。 – decyclone

+0

@decyc、私は知っていますが、私はまだ最初の場所でLBの必要性/欲望に疑問を抱いています。 –

答えて

17
<ListBox Name="CategoryListBox" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
     ItemsSource="{Binding Path=RefValues, 
       UpdateSourceTrigger=PropertyChanged}" 
       SelectionMode="Multiple"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate > 
      <StackPanel Orientation="Horizontal" 
         MinWidth="150" MaxWidth="150" 
         Margin="0,5, 0, 5" > 
       <CheckBox 
        Name="checkedListBoxItem" 
        IsChecked="{Binding 
          RelativeSource={RelativeSource FindAncestor, 
          AncestorType={x:Type ListBoxItem} }, 
          Path=IsSelected, Mode=TwoWay}" /> 
       <ContentPresenter 
        Content="{Binding 
          RelativeSource={RelativeSource TemplatedParent}, 
          Path=Content}" 
        Margin="5,0, 0, 0" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

または、このような単純な:私は同様の問題が発生し、eibhrumの答えは私にいくつかのアイデアを与えた

<Grid> 
    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel IsItemsHost="True" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBoxItem>listbox item 1</ListBoxItem> 
     <ListBoxItem>listbox item 2</ListBoxItem> 
     <ListBoxItem>listbox item 3</ListBoxItem> 
     <ListBoxItem>listbox item 4</ListBoxItem> 
     <ListBoxItem>listbox item 5</ListBoxItem> 
    </ListBox> 
</Grid> 
9

。私は次のコードを使用し、これもあなたが必要と考えるものです。 WrapPanelの代わりにUniformGridを使用しました。

<ListBox HorizontalAlignment="Stretch" 
     ItemsSource="{Binding Timers}" 
     > 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 

     <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <!-- UNIFORM GRID HERE --> 
      <UniformGrid Columns="3" IsItemsHost="True" 
       HorizontalAlignment="Stretch"/> 
     </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 

     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border> 
       <StackPanel Orientation="Vertical" > 
        <TextBlock Text="{Binding Label}" TextWrapping="Wrap"/> 
        <Separator Margin="5,0,10,0"/> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 

    </ListBox> 
1

私はこれは古い記事ですけど、私はここに同じ問題を解決しようとしていたこのしばらく行うにはかなり単純な方法に出くわし:http://social.technet.microsoft.com/wiki/contents/articles/19395.multiple-columns-in-wpf-listbox.aspx

はちょうどあなたのデータバインディングのソースを追加します(または必要に応じて項目を追加する)。

<ListBox Name="myLB" ScrollViewer.HorizontalScrollBarVisiblity="Disabled"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="2" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
+0

私はあなたがリンクを含んでいるのが好きですが、あなたの答えが@gisekによって残されたものとどう違うかを理解しようとしています。重要な違いがある場合(私はそれが欠落している可能性があることを認めています)、それが何であるかを指摘したいかもしれません。 – David

関連する問題