gpt4 book ai didi

c# - ListBoxItem 中的复杂 UI

转载 作者:可可西里 更新时间:2023-11-01 08:56:34 24 4
gpt4 key购买 nike

在 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>

结果是:

enter image description here

有没有办法在 Windows 窗体中实现相同的目标?

编辑:

1 - 有没有办法在 Windows 窗体中实现相同的目标,同时保持 separation of concerns View之间和 Application Logic以这样的方式,如果我以后想完全重新定义 View ,我不必重构整个应用程序?

2 - winforms 是否以这样一种方式支持数据绑定(bind),即我的每个 ListBoxItems可以绑定(bind)到一个复杂的 Entity ,最终包括从模型数据到 UI 数据并返回的中间类型转换,这样我就不必编写大量样板代码来填充 View ,然后将 UI 值传递回模型以保存?

3 - 如果我想介绍怎么办 Animations这样当前 SelectedItem会动态地扩展到某种“行详细信息”模式,在那里你可以看到很多附加信息?

4 - winforms 是否支持 UI Virtualization以这样的方式,如果我有 100 万个项目,它不会花费一生来加载 UI,并且只呈现屏幕上可见的内容?

5 - 假设我想在方程式中引入复杂的图形。 winforms 渲染硬件加速了吗?

6 - 我如何制作这一切 Resolution Independent以某种方式将 ListBox 及其所有内容拉伸(stretch)到可用的窗口大小,以便在保持与较小屏幕的兼容性的同时利用更大的屏幕?

7 - 建议使用 ListView控制而不是常规 ListBox , ListView提供向其中添加任何 UI 的能力?我可以为每个项目添加视频吗?或带有保存和编辑按钮的复杂主/细节模板?

8 - winforms 是否提供一致和足够的 Document Model能够创建高保真 WYSIWYG 文档和其他类型的丰富内容?

最佳答案

要回答首要问题——如何在 WinForms 中做到这一点——我建议如下:

  • 在 WinForms 应用程序中使用 WPF ListBox,封装在 ElementHost 中。这有其自身的问题,但我认为这是获得预期效果的最干净的方法。

    如果这不符合要求,那么
  • 使用具有支持此功能的组件的第三方控制套件(Infragistics 和 DevExpress 都支持)。
  • 旋转您自己的派生 ListBox 控件,该控件覆盖绘制等以呈现所需的内容。

  • 对于您的个人问题:
  • 有什么方法可以在 Windows 窗体中实现相同的功能,同时保持 separation of concerns View之间和 Application Logic以这样的方式,如果我以后想完全重新定义 View ,我不必重构整个应用程序?
    过去,我在 Windows 窗体中使用了 MVP(模型- View -演示者)范例。它适用于将 View 与业务逻辑分离,尽管不如使用 WPF 的 MVVM 方法干净。我能给出的最好建议是:不要将业务逻辑放在事件处理程序中。
  • winforms 是否以这样一种方式支持数据绑定(bind),即我的每个 ListBoxItems可以绑定(bind)到一个复杂的 Entity ,最终包括从模型数据到 UI 数据并返回的中间类型转换,这样我就不必编写大量样板代码来填充 View ,然后将 UI 值传递回模型以保存?
    不可以。Windows 窗体数据绑定(bind)不支持复杂数据绑定(bind)。您可以通过 ICustomTypeDescriptor 或 IBindingSource 自己实现一些东西,它们可以采用复杂的路径并评估它们以用于绑定(bind)目的……但没有任何东西是开箱即用的。
  • 如果我想介绍怎么办Animations这样当前SelectedItem会动态地扩展到某种“行详细信息”模式,在那里你可以看到很多附加信息?
    您必须滚动自己的 Windows 窗体 ListBox 和 ListBoxItems 并覆盖绘制操作。
  • winforms 是否支持 UI Virtualization以这样的方式,如果我有 100 万个项目,它不会花费一生来加载 UI,并且只呈现屏幕上可见的内容?
    不是开箱即用的,但一些第三方控制套件具有支持虚拟化类型的组件……但与 WPF 完全不同。
  • 假设我想在方程式中引入复杂的图形。 winforms 渲染硬件加速了吗?
    Windows 窗体基于 GDI+。 GDI+ 不是硬件加速:Windows Forms very slow under Windows7?
  • 我如何制作这一切 Resolution Independent以某种方式将 ListBox 及其所有内容拉伸(stretch)到可用的窗口大小,以便在保持与较小屏幕的兼容性的同时利用更大的屏幕?
    您可以使用 Windows 窗体中的停靠和锚定来完成此操作。或者您可以添加自定义事件处理程序以根据分辨率和窗口大小执行适当的布局调整。
  • 建议使用 ListView控制而不是常规 ListBox , ListView提供向其中添加任何 UI 的能力?我可以为每个项目添加视频吗?或带有保存和编辑按钮的复杂主/细节模板?
    这是简化...但 ListView 只是一个支持多种 View 类型的 ListBox。它在数据绑定(bind)方面也受到更多限制。 http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html .
  • winforms 是否提供了一致且充分的[文档模型][2],以支持创建高保真所见即所得文档和其他类型的丰富内容?
    一点都不。一点儿都没有。

  • 简而言之,如果这是一个可以接受的解决方案,我会将您的 WPF ListView 包装在 ElementHost 中并收工。

    关于c# - ListBoxItem 中的复杂 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15532639/

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