2013-04-26 2 views
1

У меня есть 2 классов:Получить элемент из пользовательского элемента управления/C# WPF

class MultiSwitch : ListBox 
{ 
    protected override bool IsItemItsOwnContainerOverride(object item) 
    { 
     return item is MultiSwitchItem; 
    } 
    protected override DependencyObject GetContainerForItemOverride() 
    { 
     return new MultiSwitchItem(); 
    } 

} 

class MultiSwitchItem : ListBoxItem {...} 

В принципе, я хочу, чтобы поместить элементы в зависимости от элементов сосчитать. Поэтому я подписался на событие с измененной коллекцией, и я пытаюсь получить MultiSwitchItem из коллекции Items. Я узнал, что коллекция Items не содержит MultiSwitchItems. Затем я нашел решение, которое выглядит так:

private void RearrangeItems(
     object sender, 
     NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs) 
    { 
     foreach (var item in Items) 
     { 
      MultiSwitchItem item2 = ItemContainerGenerator.ContainerFromItem(item) as MultiSwitchItem; 
      ... 
     } 
    } 

Но item2 всегда равно нулю. Что я делаю не так?

EDIT Хорошо, у меня есть небольшой прогресс в этом. Эта проблема возникает только при инициализации элемента управления (поэтому, я думаю, обертки для элементов создаются не мгновенно). Итак, вопрос теперь: как заставить создание MultiSwitchItem s, или как перебирать элементы ПОСЛЕ обертки?

+0

данных Если вы хотите изменить детали, почему Дон» Вы используете CollectionView? Другое решение - написать собственную панель. Или, если вы настаиваете на этом, вы можете попробовать событие OnLoaded или события ItemContainerGenerator, чтобы позже начать перегруппировку. – dowhilefor

+0

@ dowhilefor Я думаю, что это проще в реализации этой логики прямо в моем контейнере ... Во всяком случае, я подписался на событие Loaded, и он работает! Спасибо за помощь! –

ответ

0

вместо этого

ItemContainerGenerator.ContainerFromItem(item as TextBlock) 

сделать

ItemContainerGenerator.ContainerFromItem(item) 

вещь обыкновение быть TextBlock, это будет основной элемент

+0

К сожалению, это не является источником проблемы. (когда я попробовал этот элемент управления, я использовал только 'TextBlock') –

Смежные вопросы