Как установить сгенерированный элемент для itemscontrol в привязке данных? - PullRequest
0 голосов
/ 15 марта 2012

если я использую ListBox для привязки данных, listbox генерирует listboxitem для каждого элемента, то же самое относится и к combo box и comboBoxItem.Мой вопрос - как я могу установить его для данного ItemsControl?(например, сделать содержащий элемент Border)?

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Элемент по умолчанию, используемый для упаковки каждого элемента: ContentPresenter

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

Вы можете установить ItemTemplate, если хотите обернуть каждый элемент в Border объект

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Border BorderBrush="Blue" BorderThickness="2">
            <TextBlock Text="{Binding }" />
        </Border>
    </DataTemplate>
</ItemsControl.ItemTemplate>

Или установите ItemContainerStyle, если вы хотите применить какой-либо определенный стиль к ContentPresenter

<ItemsControl.ItemContainerStyle>
    <Style>
        <Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
        <Setter Property="Grid.Row" Value="{Binding RowIndex}" />
    </Style>
</ItemsControl.ItemContainerStyle>
0 голосов
/ 15 марта 2012

Немного покопавшись в ILSpy -

Видимо, магия делается в

    protected override DependencyObject GetContainerForItemOverride()
    {
        return new ListBoxItem();
    }

Это то, где ListBox делает это - и в моем контроле я тоже должен это переопределить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...