Добавьте пробел между элементами в ListBox WPF / Silverlight без пробелов выше первого или ниже последнего - PullRequest
11 голосов
/ 22 марта 2010

Существует ли стандартный / наилучший способ размещения элементов в WPF ListBox, чтобы между последовательными элементами было расстояние, но не выше первого или ниже последнего?

Для меня наиболее очевидный способ добавить интервал - это изменить ItemTemplate, чтобы включить пространство над, под, или как над, так и под каждым элементом. Это, конечно, означает, что над / под первым и / или последним элементом также будет находиться пространство или один элемент.

Я мог бы использовать триггеры для выбора разных шаблонов для первого, последнего, промежуточного элемента, но мне интересно, есть ли что-то более простое, что я упускаю - кажется, что контроль интервалов будет распространенным требованием.

Спасибо.

ПРИМЕЧАНИЕ. Я работаю в WPF, но предположим, что это аналогично, если не идентично в Silverlight XAML.

Ответы [ 2 ]

11 голосов
/ 22 марта 2010

Что я хотел бы сделать, так это дать отрицательное поле для шаблона элемента управления ListBox и дать такое же поле для DataTemplate / ItemContainerStyle.которые делают пространство в первом и последнем пунктах.Проверьте ниже XAML.Вместо установки в DataTemplate я дал поле самой кнопке (ListBoxItem).

   <Windows.Resources> 
     <ControlTemplate x:Key="ListBoxControlTemplate1" TargetType="{x:Type ListBox}">
        <Grid Background="{TemplateBinding Background}">
            <ItemsPresenter Margin="0,-5"/>
        </Grid>
       </ControlTemplate>
   </Window.Resources>


  <ListBox HorizontalAlignment="Center" VerticalAlignment="Center" Template="{DynamicResource ListBoxControlTemplate1}" Background="#FFAB0000">
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
        <Button Content="Button" Width="88" Margin="0,5"/>
    </ListBox>
2 голосов
/ 22 марта 2010

Вы можете использовать StyleSelector и присвоить его свойству ItemContainerStyleSelector. В селекторе стилей вы просто выбираете другой стиль в зависимости от того, является ли элемент первым, последним или другим

...