2016-03-16 2 views
1

Я использовал Canvas для ItemsPanel.Как я могу изменить ItemContainer в itemscontrol

<Setter Property="ItemsPanel"> 
    <Setter.Value> 
     <ItemsPanelTemplate> 
      <Grid> 
       <Canvas/> 
      </Grid> 
     </ItemsPanelTemplate> 
    </Setter.Value> 
</Setter> 

И переопределить два метода, наследуя ItemsControl.

protected override bool IsItemItsOwnContainerOverride(object item) 
{ 
    // ABCItem is example. like ListboxItem. 
    return (item is ABCItem); 
} 


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

Но когда я использовал ItemsPanel на холсте, Это бросить исключение.

Невозможно явно изменить коллекцию детей панели, используемой в качестве ItemsPanel для ItemsControl. ItemsControl генерирует дочерние элементы для Panel.

Как я могу использовать ItemsPanel с помощью canvas с пользовательским контейнером Itemcontainer?

thx.

ответ

0

Элемент ItemsControl использует панель верхнего уровня в ItemsPanelTemplate. Поэтому вы не должны помещать холст в сетку:

<Setter Property="ItemsPanel"> 
    <Setter.Value> 
     <ItemsPanelTemplate> 
      <Canvas/> 
     </ItemsPanelTemplate> 
    </Setter.Value> 
</Setter> 
+0

Большое спасибо. – user3214694

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