使用 WrapPanel 添加一个 TextBox 作为 ItemsControl 的最后一个元素
Posted
技术标签:
【中文标题】使用 WrapPanel 添加一个 TextBox 作为 ItemsControl 的最后一个元素【英文标题】:Add a TextBox as the last element of an ItemsControl with WrapPanel 【发布时间】:2016-05-05 10:45:17 【问题描述】:我正在尝试实现以下扫描
目前接近
尝试使用 ItemsControl(使用 WrapPanel)和包裹在 WrapPanel 中的 TextBox 来实现它,但它没有所需的输出,因为有两个 WrapPanel 分别包裹
<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>
我正在考虑是否可以在 ItemsControl 的末尾添加 TextBox,但没有这样做。请说明我的任何方法是否有其他解决方法/解决方案
【问题讨论】:
【参考方案1】:ItemsControl
需要使用DataTemplateSelector
,并为不同的列表项指定不同的模板。
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
列表中的最后一项。
【讨论】:
以上是关于使用 WrapPanel 添加一个 TextBox 作为 ItemsControl 的最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章
WPF: WrapPanel 容器的数据绑定(动态生成控件遍历)
WPF: WrapPanel 容器的模板数据绑定(ItemsControl)