Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于内容最佳匹配测试创建WPF UI_C#_Wpf - Fatal编程技术网

C# 基于内容最佳匹配测试创建WPF UI

C# 基于内容最佳匹配测试创建WPF UI,c#,wpf,C#,Wpf,我是WPF的新手,在决定如何创建所需的屏幕时遇到了麻烦 我有一个应用程序,我正试图在WPF上重新开发。当程序开始时,一个文本文件被加载到内存对象中,该内存对象保存调查问题/答案定义。对于带有预设答案选项的问题,如单选按钮(单个)或复选框(多个)条目,目标是尽可能在屏幕上同时显示所有答案(无需滚动)。为此,将在4种不同的显示格式(从1列到4列答案)之间测试答案,以获得最佳匹配。一旦找到最佳匹配,元素将以确定的任何格式绘制到屏幕上 这在WinForms中非常有效,但在WPF中,基于它处理UI创建和测

我是WPF的新手,在决定如何创建所需的屏幕时遇到了麻烦

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

这在WinForms中非常有效,但在WPF中,基于它处理UI创建和测量的方式,这似乎是一个问题。如能提供任何帮助/想法,将不胜感激

更多信息:

A-单列布局

B-两列

C-三列

D-四列

E-Tow列示例,其中为复选框或RadioButton示例包装文本

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

另一个问题是,当2+时,我总是希望列的高度大致相等。因此,如果它仅仅不适合单个列,我希望看到两个较短的列,而不是一个长列和一个非常短的列在它旁边。

  • 使列的宽度固定
  • 把你的专栏放在包装袋里
      • 使列的宽度固定
      • 把你的专栏放在包装袋里

      您应该使用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
      附加属性禁用滚动,但内容将被剪切)

      您应该使用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
      附加属性禁用滚动,但内容将被剪切)

      我建议查看现有的包装,以布局多个元素。如果这不符合您的需要,我会去实现一个来自
      检查一个自定义面板的实现

      我建议检查现有的包装面板,以便布置多个元素。如果这不符合您的需要,我会去实现一个来自 检查自定义面板的实现

      谢谢