C# 基于内容最佳匹配测试创建WPF UI
我是WPF的新手,在决定如何创建所需的屏幕时遇到了麻烦 我有一个应用程序,我正试图在WPF上重新开发。当程序开始时,一个文本文件被加载到内存对象中,该内存对象保存调查问题/答案定义。对于带有预设答案选项的问题,如单选按钮(单个)或复选框(多个)条目,目标是尽可能在屏幕上同时显示所有答案(无需滚动)。为此,将在4种不同的显示格式(从1列到4列答案)之间测试答案,以获得最佳匹配。一旦找到最佳匹配,元素将以确定的任何格式绘制到屏幕上 这在WinForms中非常有效,但在WPF中,基于它处理UI创建和测量的方式,这似乎是一个问题。如能提供任何帮助/想法,将不胜感激 更多信息: A-单列布局 B-两列 C-三列 D-四列 E-Tow列示例,其中为复选框或RadioButton示例包装文本 **这里的关键是,当页面加载时,我还不知道这些格式中的哪种适合我的内容而不滚动,更不用说最适合了。这就是我现在挂断电话的地方。在旧版本的WinForms应用程序中,我在显示内容之前测量了所有内容,因此我知道哪种格式最适合显示内容 另一个问题是,当2+时,我总是希望列的高度大致相等。因此,如果它仅仅不适合单个列,我希望看到两个较短的列,而不是一个长列和一个非常短的列在它旁边。C# 基于内容最佳匹配测试创建WPF UI,c#,wpf,C#,Wpf,我是WPF的新手,在决定如何创建所需的屏幕时遇到了麻烦 我有一个应用程序,我正试图在WPF上重新开发。当程序开始时,一个文本文件被加载到内存对象中,该内存对象保存调查问题/答案定义。对于带有预设答案选项的问题,如单选按钮(单个)或复选框(多个)条目,目标是尽可能在屏幕上同时显示所有答案(无需滚动)。为此,将在4种不同的显示格式(从1列到4列答案)之间测试答案,以获得最佳匹配。一旦找到最佳匹配,元素将以确定的任何格式绘制到屏幕上 这在WinForms中非常有效,但在WPF中,基于它处理UI创建和测
- 使列的宽度固定
- 把你的专栏放在包装袋里
- 使列的宽度固定
- 把你的专栏放在包装袋里
- 将窗口设置为根据内容自动调整大小李>
- 设立 网格布局中柱的相对尺寸(即1/3 vs 2/3),以便 任何内容都将始终以这些比率显示李>
- 设置最大值和最大值 列/网格/窗口的最小尺寸,以便在必要时内容将被包装 必要的
基于V1-4布局的更新,您应该考虑是否可以根据所提供的内容确定布局。如果是这样,请为内容
ViewModel
类型创建适当的通用DataTemplates
(您的ViewModel
可以是单个类-这是WPF数据绑定和MVVM的优势之一),并使用TemplateSelector
提供DataTemplate
(布局)对于基于某些选择逻辑的内容
编辑(第二名):
要测量文本,请使用FormattedText
class
要测量整个
控件
请使用特定的大小调用measure()
。如果DesiredSize
大于Measure()
Size
参数,则内容超出了提供的范围,可能会根据您是否允许滚动而滚动(您可以使用ScrollViewer.CanContentScroll
附加属性禁用滚动,但内容将被剪切)您应该使用WPF提供的相对大小调整布局机会,这样您就不必像WinForms那样担心测试特定布局
例如,您可以:
- 将窗口设置为根据内容自动调整大小李>
- 设立
网格布局中柱的相对尺寸(即1/3 vs 2/3),以便
任何内容都将始终以这些比率显示李>
- 设置最大值和最大值
列/网格/窗口的最小尺寸,以便在必要时内容将被包装
必要的
少考虑固定布局策略的作用,多考虑如何使布局对内容做出反应,就像基于web的CSS系统一样
编辑:
基于V1-4布局的更新,您应该考虑是否可以根据所提供的内容确定布局。如果是这样,请为内容
ViewModel
类型创建适当的通用DataTemplates
(您的ViewModel
可以是单个类-这是WPF数据绑定和MVVM的优势之一),并使用TemplateSelector
提供DataTemplate
(布局)对于基于某些选择逻辑的内容
编辑(第二名):
要测量文本,请使用FormattedText
class
要测量整个控件
请使用特定的大小调用measure()
。如果DesiredSize
大于Measure()
Size
参数,则内容超出了提供的范围,可能会根据您是否允许滚动而滚动(您可以使用ScrollViewer.CanContentScroll
附加属性禁用滚动,但内容将被剪切)我建议查看现有的包装,以布局多个元素。如果这不符合您的需要,我会去实现一个来自
检查一个自定义面板的实现我建议检查现有的包装面板,以便布置多个元素。如果这不符合您的需要,我会去实现一个来自
检查自定义面板的实现谢谢