在WPF中,我可以通过为ListBox
提供一个ItemTemplate
来将任何UI添加到ListBoxItem
中:
在WPF中,我可以通过为ListBox
提供一个ItemTemplate
来将任何UI添加到ListBoxItem
中:
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="1" BorderBrush="Gray" CornerRadius="8" Padding="4,0,4,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<CheckBox Grid.Column="1" Content="Is Active Customer" IsChecked="{Binding IsActive}"/>
<Label Content="Id:" Grid.Row="1" HorizontalAlignment="Right"/>
<Label Content="Name:" Grid.Row="2" HorizontalAlignment="Right"/>
<TextBox Text="{Binding Id}" Grid.Row="1" Grid.Column="1"/>
<TextBox Text="{Binding Name}" Grid.Row="2" Grid.Column="1"/>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
结果如下:
在Windows Forms中有没有实现相同效果的方法?
编辑:
1 - 在Windows Forms中有没有一种方式可以实现同样的功能,同时保持视图
和应用程序逻辑
之间的关注点分离
,以便如果我以后想完全重新定义视图
,我不必重构整个应用程序?
2 - WinForms是否支持数据绑定,以便我可以将我的每个ListBoxItems
绑定到一个复杂的实体
,最终包括从模型数据到UI数据的中间类型转换,并且不必编写大量样板代码来填充视图,然后将UI值传回模型以保存?
3 - 如果我想以某种方式引入动画
,使当前的SelectedItem
能够扩展自身并进入某种“行详细信息”模式,您可以看到大量其他信息怎么办?
4 - WinForms是否支持UI虚拟化
,以便如果我有100万个项目,它不需要花费一生时间来加载UI,并仅呈现屏幕上可见的内容?
5 - 比如我想把复杂的图形引入到方程式中。 WinForms是否具有渲染硬件加速的功能?
6 - 如何使所有这些分辨率无关
,以便ListBox及其所有内容可以拉伸到可用窗口大小,以利用更大的屏幕,同时与较小的屏幕兼容?
7 - 建议使用ListView
控件而不是常规的ListBox
,ListView
是否提供将任何UI添加到其中的功能?例如,我可以为每个项目添加视频吗?或者包含保存和编辑按钮的复杂主/细节模板?
8 - WinForms是否提供一致且足够的文档模型,以支持创建高保真度的所见即所得文档和其他类型的丰富内容?
ListView
本身是不会帮助你的;如果我没记错的话,它不支持任何复杂的绑定。我依稀记得可以使用各种属性(如Bindable
)和辅助工具(如TypeDescriptor
)将一些东西拼凑在一起,但我已经很久没有在那个领域里折腾了。 - JerKimball