c# - 根据内容的最佳匹配测试创建 WPF UI

标签 c# wpf

我是 WPF 的新手,我一直无法确定如何创建我需要的屏幕。

我有一个应用程序正在尝试在 WPF 上重新开发。当程序开始时,一个文本文件被加载到一个内存对象中,该对象包含调查问题/答案定义。对于具有预设答案选项的问题,例如单选按钮(单个)或复选框(多个)条目,目标是尽可能在屏幕上一次显示所有答案(不滚动)。为此,答案在 4 种不同的显示格式之间进行测试,范围从 1 到 4 列答案,以获得最佳匹配。一旦找到最适合的元素,就会以确定的任何格式将元素绘制到屏幕上。

这在 WinForms 中工作得很好,但根据它处理 UI 创建和测量的方式,它在 WPF 中似乎是一个问题。任何可以提供的帮助/想法将不胜感激...

更多信息:

Design

A - 单列布局

B - 两列

C - 三列

D - 四列

E - Tow Column Example,其中为 Checkbox 或 RadioButton 示例换行的文本。

** 这里的关键是,当页面加载时,我还不知道这些格式中的哪一种在不滚动的情况下适合我的内容,更不用说最适合了。这就是我现在挂断电话的地方。在我的应用程序的旧 WinForms 版本中,我在显示之前测量所有内容,因此我知道哪种格式最适合它。

另一个问题是我总是希望 2+ 时的列高度大致相等。因此,如果它几乎不能放在一个列中,我希望看到两个较短的列,而不是 1 个长列和一个很短的列。

最佳答案

您应该使用 WPF 提供的相对大小调整布局机会,这样您就不必像在 WinForms 中那样担心测试特定布局。

例如,您可以:

  • 将您的窗口设置为根据您的内容自动调整大小。
  • 设置 网格布局中列的相对大小(即 1/3 与 2/3),以便 任何内容将始终以这些比例显示。
  • 设置最大值和 列/网格/窗口的最小尺寸,以便内容可以换行,如果 必要的。

少考虑固定布局策略的工作原理,多考虑如何让布局对内容使用react,就像基于 CSS 的网络系统一样。

编辑:

基于V1-4布局的更新,您应该考虑是否可以根据提供的内容确定布局。如果是这样,请为内容 ViewModel 类型创建适当的通用 DataTemplates(您的 ViewModel 可以是单个类 - 这是 WPF 的优势之一数据绑定(bind)和 MVVM)并使用 TemplateSelector 根据某些选择逻辑为内容提供 DataTemplate(布局)。

编辑(第 2 步):

要测量文本,请使用 FormattedText 类。

要测量整个 Control,请使用特定的 Size 调用 Measure()。如果 DesiredSize 大于 Measure() Size 参数,则内容会溢出提供的边界并且可能会滚动,具体取决于您是否允许滚动(您可以使用 ScrollViewer.CanContentScroll 附加属性禁用滚动,但内容将被剪裁)

关于c# - 根据内容的最佳匹配测试创建 WPF UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27528183/

相关文章:

wpf - 根据子属性设置表单 MinWidth 和 MinHeight

c# - 使用 TextPointers 选择时不要突出显示换行符

wpf - 自定义 TreeView 以允许多选

c# - 可以在 Linux 中使用 MonoDevelop 编译 Visual Studio 2010 .Net 项目吗?

c# - 如何在 C#.NET 的循环中创建不确定的后台线程

c# - 在 foreach 循环中创建字符串?还是在外面创建,在里面使用?

c# - 在 C# 中使用 FlowLayoutPanel 创建面包屑导航控件

c# - 在 WPF 控件上显示 'loading' 指示符的最佳方法是什么

c# - 改善可感知的 WPF 应用程序启动时间

c# - 确保多线程应用程序中的ProcessingQueue.Count正确