2016-01-28 6 views
2

Я пытаюсь выполнить следующие scanarios enter image description hereДобавить TextBox в качестве последнего элемента в ItemsControl с WrapPanel

ПОДХОД ПОКА

пытался реализовать с ItemsControl (с WrapPanel) и TextBox завернуты внутри WrapPanel, но это не имеет желаемый результат, поскольку есть два WrapPanels упаковка отдельно

<toolkit:WrapPanel Orientation="Horizontal"> 
    <ItemsControl ItemsSource="{Binding someThing}"> 
     <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Border> 
          <TextBlock Text="somesomething" /> 
         </Border> 
        </Grid> 
       </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <toolkit:WrapPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
     <TextBox/> 
</toolkit:WrapPanel> 

Я имею в виду, если я Ĉ добавьте TextBox в END элемента ItemsControl, но не смогли этого сделать. Просьба указать, есть ли какие-либо другие способы решения или решения для любого из моих подходов.

ответ

0

Длянеобходимо указатьи указать различные шаблоны для разных элементов списка.

public class BlockItem 
{ 
    // TODO 
} 

public class BoxItem 
{ 
    // TODO 
} 

public class MyTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate BlockTemplate { get; set; } 
    public DataTemplate BoxTemplate { get; set; } 

    protected override DataTemplate SelectTemplateCore(object item) 
    { 
     if (item is BlockItem) return BlockTemplate; 
     else if (item is BoxItem) return BoxTemplate; 

     return base.SelectTemplateCore(item); 
    } 
} 

XAML:

<ItemsControl ItemsSource="{Binding someObject}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <toolkit:WrapPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplateSelector> 
     <local:MyTemplateSelector> 
      <local:MyTemplateSelector.BlockTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock Text="something"/> 
        </Grid> 
       </DataTemplate> 
      </local:MyTemplateSelector.BlockTemplate> 
      <local:MyTemplateSelector.BoxTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBox Text="something"/> 
        </Grid> 
       </DataTemplate> 
      </local:MyTemplateSelector.BoxTemplate> 
     </local:MyTemplateSelector> 
    </ItemsControl.ItemTemplateSelector> 
</ItemsControl> 

А затем добавить различные типы объектов к источнику пунктов:

someObject.Add(new BlockItem()); 
someObject.Add(new BlockItem()); 
someObject.Add(new BlockItem()); 
someObject.Add(new BlockItem()); 
someObject.Add(new BoxItem()); 

Если вы хотите TextBox быть последним элементом, то вам нужно это последний элемент в вашем списке ItemsSource.

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