ListBoxItem中的复杂UI

在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窗体中实现相同的function?

编辑:

1 – 有没有什么办法可以在Windows窗体中实现同样的效果,同时保持ViewApplication Logic之间的separation of concernsseparation of concerns这样,如果我后来想彻底重新定义View ,我不必重构整个申请?

2 – winforms是否支持数据绑定,使我的每个ListBoxItems都可以绑定到一个复杂的Entity ,最终包括从Model数据到UI数据的中间types转换,并以这种方式,我不必写吨的样板代码来填充视图,然后将UI值传回模型以保存?

3 – 如果我想引入Animations ,那么当前的SelectedItem会自动将其展开为某种“行详细信息”模式,您可以在其中看到许多其他信息?

4 – winforms是否支持UI Virtualization ,如果我有,说100万个项目,它不需要一生的时间来加载用户界面,只呈现什么是可见的屏幕上?

5 – 说我想介绍复杂的graphics的方程。 winforms渲染硬件加速?

6 – 如何使Resolution Independent以这种方式使ListBox及其所有内容扩展到可用的窗口大小,以便在保持与较小屏幕的兼容性的同时利用大屏幕?

7 – 有人build议使用ListView控件而不是常规的ListBoxListView提供了添加任何UI的能力? 我可以为每个项目添加video吗? 或一个复杂的主/细节模板与保存和编辑button?

8 – winforms是否提供了一个一致和充分的文档模型 ,使创build高保真所见即所得的文件和其他types的丰富的内容?

要回答总体问题 – 如何在WinForms中做到这一点 – 我会build议如下:

  1. 在你的WinForms应用程序中使用一个WPF列表框,包装在一个ElementHost中。 这有它自己的问题,但我认为这是达到预期效果的最干净的方法。

    如果这不符合法案,那么

  2. 使用具有支持此组件的第三方控件套件(Infragistics和DevExpress均可)。

  3. 旋转你自己派生的ListBox控件,覆盖paint等来渲染所需的内容。

针对您的个人问题:

  1. 有没有什么办法可以在Windows窗体中实现同样的function,同时保持ViewApplication Logic之间的separation of concernsseparation of concerns这样,如果我以后想彻底重新定义View ,我不必重构整个应用程序?
    过去,我使用Windows Forms的MVP(model-view-presenter)模式。 它用于从业务逻辑中分离视图,尽pipe不像WPF的MVVM方法那么干净。 我可以给出的最好的build议是:不要把业务逻辑放在事件处理程序中。

  2. 是否winforms支持数据绑定的方式,我的每个ListBoxItems可以绑定到一个复杂的Entity ,最终包括从模型数据到UI数据的中间types转换和返回,这样,我不必写吨样板代码来填充视图,然后将UI值传回模型中以保存?
    Windows窗体数据绑定不支持复杂的数据绑定。 你可以通过ICustomTypeDescriptor或者IBindingSource自己实现一些东西,这些东西可以采取复杂的path并且为了绑定的目的而对它们进行评估……但是没有任何东西存在于这个框中。

  3. 如果我想引入Animations ,那么当前的SelectedItem会dynamic地将其展开为某种“行详细信息”模式,您可以在其中看到许多其他信息?
    你将不得不推出自己的Windows窗体ListBox和ListBoxItems并重写绘制操作。

  4. winforms是否支持UI Virtualization ,如果我有,说100万个项目,它不需要一生的时间来加载用户界面,只渲染屏幕上可见的东西?
    不是开箱即用,但一些第三方控制套件具有支持虚拟化types的组件,但是完全不像WPF那样。

  5. 假设我想将复杂的graphics引入方程式。 winforms渲染硬件加速?
    Windows窗体基于GDI +。 GDI +不是硬件加速: 在Windows7下Windows窗体非常慢?

  6. 我如何使这个Resolution Independent ,使列表框及其所有内容扩展到可用的窗口大小,以利用更大的屏幕,同时保持兼容性较小的?
    您可以在Windows窗体中使用“停靠”和“锚定”来完成此操作。 或者您可以添加自定义事件处理程序,根据分辨率和窗口大小执行适当的布局调整。

  7. 有人build议使用ListView控件而不是常规的ListBoxListView提供了添加任何UI的能力? 我可以为每个项目添加video吗? 或一个复杂的主/细节模板与保存和编辑button?
    这简化了…但是ListView只是一个支持多种视图types的ListBox。 在数据绑定方面也更加有限。 http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html

  8. winforms是否提供了一个一致且充分的[文档模型] [2],能够创build高保真所见即所得文档和其他types的丰富内容?
    一点都不。 甚至没有一点点。

简而言之,如果这是一个可以接受的解决scheme,我会将你的WPF ListView包裹在一个ElementHost中,然后每天给它打电话。

我们通过在可滚动面板中使用UserControl来完成此操作。 准备一个拥有所有编辑控件的用户控件。 将它们添加到可滚动面板,并将dosk属性设置为Top。 通过观看添加的用户控制项目上的焦点和点击事件来实现项目select行为。