如何最初将 WPF 控件放置在动态全屏应用程序上
How to initially place WPF controls on dynamic fullscreen application
好吧,所以我正在尝试为我的 独特 案例找出完成此任务的最佳方法。我有一个全屏 WPF 应用程序,其中控件动态添加到 Grid
,用户可以选择自由地 move/resize。控件可以在父 Grid
上的任何位置单独移动或调整大小,但我已通过它们的 MouseMove
事件阻止它们重叠。它们也不能移出容器。由于该应用程序将 运行 在具有不同显示器尺寸的机器上运行,因此我在制作原始布局时需要考虑到这一点。我有一个我想使用的初始布局,但似乎我没有选择:
我首先尝试使用 行和列 只是 来(最初)放置添加的控件。此方法可以正确放置它们,但当我需要移动元素或调整元素大小时会出现问题,因为控件已经 分配 到特定的行和列。我可以尝试使用此方法,然后在放置控件后删除任何 rows/columns,但我认为这不会很好地工作。
我也考虑过 Viewbox,但出于相当明显的原因,这对我来说并不实用(因为它只是调整控件的大小以适合屏幕)。我不想使用它,因为我只需要它来标准化我的初始布局。而已。我也不想弄乱将显示在 window.
上的任何文本
所以,是的,这更像是一个 "best practice" 问题,因为我能想到的任何解决方案看起来都不会很专业或优雅。如果您需要说明,请随时提出任何问题。
编辑:作为补充说明,我更愿意坚持使用 Grid
而不是 Canvas
作为我的容器。
编辑 2:为了清楚起见,我 不需要 在第一次启动后 需要特定的(初始)布局。当程序退出时,布局(每个元素的边距、宽度和高度等)将保存到文件中以供下次启动使用。
我已经使用 WPF 开发了许多 kiosk/interactive 应用程序。如果您试图显示元素转换(移动时),那么最好使用父级 Canvas 并绑定 Canvas.Left 和 Canvas.Top 属性。您可以使用 Canvas 模拟网格对齐方式,如果您设置机制(例如 Manipulation/Mouse 事件、转换器)以确保 Canvas 附加属性适应 [=17] =] 偏移量。
使用 Viewbox 来减轻显示差异并不少见(并且您的用例不是 "rather unique")。您将 Viewbox 设置为目标分辨率(例如 1920x1080)并允许控件填充可用 space。另一种选择是根据应用程序 window size/ratio.
动态应用内容模板
查看多个选项后,我决定只使用计算来(某种程度上)模拟 rows/columns 的行为。因为我的应用程序是全屏的,所以我可以使用 SystemParameters.PrimaryScreenWidth
和 SystemParameters.PrimaryScreenHeight
来定位我的布局。结合使用通用填充(静态值)和基于比率的计算(动态值),我可以顺利地设置我的初始布局。
例如,我将显示器的宽度除以 6
(四舍五入以避免小数)并将其(减去控件宽度的一半)用作控件的 Margin.Left
属性,以 'column' 为中心。
老实说,我现在的初始布局相当简单,所以我们会看看这是否足够继续。感谢所有为这个问题做出贡献的人,如果我不清楚我在问什么,我深表歉意。
好吧,所以我正在尝试为我的 独特 案例找出完成此任务的最佳方法。我有一个全屏 WPF 应用程序,其中控件动态添加到 Grid
,用户可以选择自由地 move/resize。控件可以在父 Grid
上的任何位置单独移动或调整大小,但我已通过它们的 MouseMove
事件阻止它们重叠。它们也不能移出容器。由于该应用程序将 运行 在具有不同显示器尺寸的机器上运行,因此我在制作原始布局时需要考虑到这一点。我有一个我想使用的初始布局,但似乎我没有选择:
我首先尝试使用 行和列 只是 来(最初)放置添加的控件。此方法可以正确放置它们,但当我需要移动元素或调整元素大小时会出现问题,因为控件已经 分配 到特定的行和列。我可以尝试使用此方法,然后在放置控件后删除任何 rows/columns,但我认为这不会很好地工作。
我也考虑过 Viewbox,但出于相当明显的原因,这对我来说并不实用(因为它只是调整控件的大小以适合屏幕)。我不想使用它,因为我只需要它来标准化我的初始布局。而已。我也不想弄乱将显示在 window.
上的任何文本所以,是的,这更像是一个 "best practice" 问题,因为我能想到的任何解决方案看起来都不会很专业或优雅。如果您需要说明,请随时提出任何问题。
编辑:作为补充说明,我更愿意坚持使用 Grid
而不是 Canvas
作为我的容器。
编辑 2:为了清楚起见,我 不需要 在第一次启动后 需要特定的(初始)布局。当程序退出时,布局(每个元素的边距、宽度和高度等)将保存到文件中以供下次启动使用。
我已经使用 WPF 开发了许多 kiosk/interactive 应用程序。如果您试图显示元素转换(移动时),那么最好使用父级 Canvas 并绑定 Canvas.Left 和 Canvas.Top 属性。您可以使用 Canvas 模拟网格对齐方式,如果您设置机制(例如 Manipulation/Mouse 事件、转换器)以确保 Canvas 附加属性适应 [=17] =] 偏移量。
使用 Viewbox 来减轻显示差异并不少见(并且您的用例不是 "rather unique")。您将 Viewbox 设置为目标分辨率(例如 1920x1080)并允许控件填充可用 space。另一种选择是根据应用程序 window size/ratio.
动态应用内容模板查看多个选项后,我决定只使用计算来(某种程度上)模拟 rows/columns 的行为。因为我的应用程序是全屏的,所以我可以使用 SystemParameters.PrimaryScreenWidth
和 SystemParameters.PrimaryScreenHeight
来定位我的布局。结合使用通用填充(静态值)和基于比率的计算(动态值),我可以顺利地设置我的初始布局。
例如,我将显示器的宽度除以 6
(四舍五入以避免小数)并将其(减去控件宽度的一半)用作控件的 Margin.Left
属性,以 'column' 为中心。
老实说,我现在的初始布局相当简单,所以我们会看看这是否足够继续。感谢所有为这个问题做出贡献的人,如果我不清楚我在问什么,我深表歉意。