ItemsControl, содержащий другие контролы
От: rope  
Дата: 02.08.10 21:19
Оценка:
Здравствуйте!

Помогите, пожалуйста, разобраться с ItemsControl в WPF.

Я не могу понять, умеет ли ItemsControl управляться с другими контролами так же, как это делает ListBox.

Поясню на примере. Есть такой XAML (пример №1):

<ListBox>
    <ListBox.Items>
        <Button>Button #1</Button>
        <Button>Button #2</Button>
        <Button>Button #3</Button>
    </ListBox.Items>
</ListBox>


В окне он отображается таким образом:



Теперь, допустим, я хочу чтобы каждая кнопка отображалась в рамке, и при этом не желаю менять список элементов ListBox.

Это решается достаточно просто переопределением ItemContainerStyle (пример №2):

<ListBox>
    <ListBox.Items>
        <Button>Button #1</Button>
        <Button>Button #2</Button>
        <Button>Button #3</Button>
    </ListBox.Items>
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Border Background="LightCoral" Padding="4" Margin="4">
                            <ContentPresenter/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>


Получается примерно такая картина:



Теперь попробуем заменить ListBox на его предка — ItemsControl.

XAML, аналогичный примеру №1 будет выглядеть так:

<ItemsControl>
    <ItemsControl.Items>
        <Button>Button #1</Button>
        <Button>Button #2</Button>
        <Button>Button #3</Button>
    </ItemsControl.Items>
</ItemsControl>


И он прекрасно отобразится в окне:



Вопрос заключается в том, как мне поместить каждую из кнопок в ItemsControl в Border. Т.е. как повторить, то, что уже было сделано в примере №2, но с использованием ItemsControl, а не ListBox.

Буду признателен за помощь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.