内部ListBoxItem中复杂的UI(Complex UI inside ListBoxItem)

2019-07-22 04:57发布

在WPF中,我可以添加任何UI到ListBoxItem通过提供的S ListBoxItemTemplate

 <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窗体中一样吗?

编辑:

1 -有什么办法,以实现在Windows窗体一样,同时保持separation of concerns之间ViewApplication Logic以这样的方式,如果我以后想完全重新定义View ,我就不会去重构整个应用程序?

2 -是否支持WinForms的数据绑定以这样的方式,每个我的ListBoxItems可以绑定到一个复杂的Entity ,最终包括模型数据UI数据的中间类型转换和背部,在这样我就不必写的方式吨的样板代码来填充视图,然后通过UI值回模式,以节省?

3 -如果我想介绍Animations以这样的方式使目前SelectedItem会兴致勃勃地扩大自己变成某种“行详细信息”的模式,在这里你可以看到很多的附加信息?

4 -是否支持WinForms的UI Virtualization这样的方式,如果我有,比如说1万件商品它并不需要一生的时间去加载UI,只渲染什么是显示在屏幕上?

5 - 说我想介绍复杂的图形公式。 是的WinForms渲染硬件加速?

6 -如何使这一切的Resolution Independent的这样一种方式,列表框和其所有内容延伸到可用的窗口大小,以便利用更大的屏幕,同时保持与较小的兼容性?

7 -它被建议使用ListView控件,而不是一个普通的ListBox ,并在ListView提供任何UI添加到它的能力吗? 我可以添加视频,例如每个项目? 或保存和编辑按钮复杂的主/从模板?

8 -的WinForms是否提供一致的和适当的文档模型 ,使高保真所见即所得的文件和其他类型的丰富内容的创建?

Answer 1:

要回答的首要问题 - 如何的WinForms做到这一点 - 我建议如下:

  1. 请使用您的WinForms应用程序中的WPF列表框,包裹在一个ElementHost的。 这有其自身的问题,但我认为这是取得预期的效果最彻底的方法。

    如果不符合这些条件,那么

  2. 使用具有支持这种(Infragistics的和DevExpress的都这样做)组件的第三方控制套件。

  3. 自旋重写漆自己得到的ListBox控件等来渲染所需的内容。

您个人的问题:

  1. 有没有什么办法,以实现在Windows窗体一样,同时保持separation of concerns之间ViewApplication Logic以这样的方式,如果我以后想完全重新定义View ,我就不必重构整个应用程序?
    在过去,我已经使用Windows窗体的MVP(模型 - 视图 - 主持人)范例。 它适用于从业务逻辑与WPF的MVVM方法分离的观点,尽管不是那样干净。 我能给的最好的建议是:不要把业务逻辑在事件处理程序。

  2. 是否支持的WinForms数据绑定以这样的方式,每个我的ListBoxItems可以绑定到一个复杂的Entity ,最终包括模型数据UI数据的中间类型转换和背部,以这样的方式,我没有写吨样板代码来填充视图,然后再通过UI值放回模型为了节省?
    第Windows窗体数据绑定不支持复杂数据绑定。 您可以实现通过ICustomTypeDescriptor或IBindingSource自己的东西,可以采取复杂的路径,并评估它们结合的目的......但存在开箱即没有为这一点。

  3. 如果我想介绍Animations以这样的方式使目前SelectedItem会兴致勃勃地扩大自己变成某种“行详细信息”的模式,在这里你可以看到很多的附加信息?
    你必须推出自己的Windows窗体列表框和ListBoxItems和覆盖喷漆操作。

  4. 不支持的WinForms UI Virtualization这样的方式,如果我有,比如说1万件商品它并不需要一生的时间去加载UI,只渲染什么是显示在屏幕上?
    不开箱,但一些第三方控件套房都支持类型的虚拟化组件...但不是在所有以同样的方式做WPF。

  5. 说我想介绍复杂的图形公式。 是的WinForms渲染硬件加速?
    Windows窗体是基于GDI +。 GDI +是不是硬件加速: Windows窗体的Windows7下的很慢?

  6. 如何使这一切的Resolution Independent的这样一种方式,列表框和其所有内容延伸到可用的窗口大小,以便利用更大的屏幕,同时保持与较小的兼容性?
    您可以使用停靠和锚定在Windows窗体来实现这一目标。 或者,您可以添加自定义事件处理程序来执行基于分辨率和窗口大小适当的布局调整。

  7. 它被建议使用ListView控件,而不是一个普通的ListBox ,并在ListView提供任何UI添加到它的能力吗? 我可以添加视频,例如每个项目? 或保存和编辑按钮复杂的主/从模板?
    这简化了......但一个ListView仅仅是支持多种视图类型的列表框。 它也较为有限在数据绑定方面。 http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html 。

  8. 确实的WinForms提供一致的和适当的[文档模型] [2],使高保真所见即所得的文件和其他类型的丰富内容的创建?
    一点都不。 一点儿都没有。

总之,如果它是一个可接受的解决方案,我会换你WPF的ListView在ElementHost的和收工。



Answer 2:

我们通过在滚动面板使用用户控件这样做。 准备具有上的所有编辑控件的用户控件。 他们加入与dosk财产滚动面板被设置为首页。 通过观察重点,单击添加用户控件项目事件所采取的项目选择行为。



文章来源: Complex UI inside ListBoxItem