Как я могу остановить элемент управления ListBox от упаковки каждого элемента в ListBoxItem? - PullRequest
1 голос
/ 02 января 2011

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

Размер временной шкалы можно изменить, используя элемент управления большим пальцем, закрепленный слева и справа от каждого элемента. Изменение размера работает хорошо, если я помещаю элемент timline непосредственно на холст, но так как мне нужно сохранить список элементов, я подумал, что список будет обрабатывать его для меня. Поэтому я сделал ItemsPanel холстом и, конечно же, все хорошо отрисовал. Единственная проблема заключалась в том, что я больше не мог изменять размеры элементов временной шкалы. Я быстро понял, что установка canvas.Left для моего элемента при перетаскивании ничего не изменит, потому что элемент больше не находится на холсте, а внутри элемента listbox (который находится на холсте).

Возможно ли, чтобы Listbox прекратил оборачивать каждый элемент в свой собственный элемент listbox и вместо этого оборачивать их, скажем, в собственный ContentControl?

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Попробуйте это:

class MyListBox : ListBox
{
    protected override System.Windows.DependencyObject GetContainerForItemOverride()
    {
        return new ContentControl();
    }
}

Ссылка: Как изменить контейнер элементов по умолчанию для ItemsControl?

0 голосов
/ 02 января 2011

Это возможно, если добавить UIElement непосредственно к ListBox.Items (или ItemsSource). Однако я бы рекомендовал вместо этого использовать ItemContainerStyle для изменения Canvas.Left и Canvas.Top. Этот стиль позволяет вам контролировать свойства контейнера (ListBoxItem), сгенерированного для каждого элемента в вашем ItemsControl.

<ListBox ItemsSource="{Binding MyItems}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Canvas.Left" Value="{Binding SomeLeftProperty}"/>
            <Setter Property="Canvas.Top" Value="{Binding SomeTopProperty}"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...