gpt4 book ai didi

c# - 使用 WrapPanel 添加一个 TextBox 作为 ItemsControl 的最后一个元素

转载 作者:太空宇宙 更新时间:2023-11-03 15:26:45 25 4
gpt4 key购买 nike

我正在尝试实现以下扫描器 enter image description here

到目前为止的方法

尝试使用 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,但没有成功。请说明我的任何方法是否有任何其他解决方法/解决方案

最佳答案

您需要为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 列表中的最后一项。

关于c# - 使用 WrapPanel 添加一个 TextBox 作为 ItemsControl 的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com