2014-01-07 63 views
7

List<string>コレクションをItemsControlに表示しています。問題は、リスト項目TheyAreAllNextToEachOtherの間にスペースがないことです。WPFのアイテム間隔ItemsControl

アイテム間の間隔をどのようにすることができますか?

<ItemsControl Grid.Column="2" 
     Grid.ColumnSpan="2" 
     ItemsSource="{Binding Path=ShowTimes}" 
     BorderThickness="0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+4

あなたが現在提供されている2つの回答の違いを知っていれば、 'ItemContainerStyle'は' item container 'の 'Style'、' ListBox'を使用していれば 'ListBoxItem'です。 'ItemTemplate'はアイテムの 'contents'がどのように見えるかを定義する' DataTemplate'です。したがって、 'ItemContainerStyle'ではコンテナのプロパティ(例えばListBoxItem.IsSelected)にアクセスでき、' DataTemplate'ではデータ項目のパブリッククラスプロパティにアクセスできます。 – Sheridan

答えて

3

私はあなたが余裕

<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Margin="3,3,3,3" Text="{Binding}"/> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
+4

これは動作しますが、他のすべてのソリューションとほぼ同じですが、理想的ではありません。アイテムが1つだけの場合は、何も配置しないスペースを追加します。最初と最後のアイテムには常に余分なスペースがあります。これは、前の要素のマージンが常に3になるため、各要素の有効間隔が6であることも意味します。 – Julien

+0

3の間隔が必要な場合は、左右の余白を1.5に設定できます。ちょうど – sam

+1

と言っているだけです。項目コントロールの外側の間隔を空けないようにするには、項目パネルにマイナスの余白を設定します。アイテムのギャップが6であるこの回答の場合、アイテム: '。 – grek40

40

を設定ItemTemplateにを追加したいがどこに5を言うためにセットマージンをすることができ、このようなあなたのItemsControlのコンテナ(デフォルトのContentPresenter)にスタイルを提供します:

<ItemsControl> 
     <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="FrameworkElement.Margin" Value="5"/> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 
関連する問題