我最近在WPF方面没有做太多事情,所以决定做一些我可以使用的东西,所以首先我尝试制作一些类似交互式表单的东西,以减少纸张的使用。这就是我正在做的,我扫描了原始表单,将其保存为 .png 格式,我将其添加为资源,然后通过以下方式将其设置为窗口的背景图像:
<Window.Background>
<ImageBrush ImageSource="pictures/podstawowa_front.png" />
</Window.Background>
这工作得很好,但现在在用户要输入一些数据的地方,我想放置 WPF 控件,这也很好。当我想调整窗口大小时,问题就出现了,背景图像的大小调整与控件的大小不同。我尝试过使用不同的控件容器,但似乎都不起作用。还从控件中删除了所有高度、宽度、对齐,并仅留下边距(因此它有一些起始位置)。
示例:
启动时 - 它或多或少处于正确的位置且大小相似:
调整窗口大小后:
所以你可以看到我稍微缩小了窗口,但是控件缩小得更多并且根本没有移动。
我尝试过谷歌搜索并寻找类似的问题,但几乎找不到任何东西,试图搞乱不同的容器、转换,但似乎没有任何效果如我所愿。 (我也尝试只使用 XAML)
我可能可以通过使用大量嵌套容器来解决它,但我试图避免它,因为它似乎是一种矫枉过正,我想知道是否有其他更快、更优雅的方法来做到这一点。请随时在评论中询问更多详细信息。预先感谢您提供任何提示。
XAML 代码:
<Window x:Class="DnD.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="768" Width="1366">
<Window.Background>
<ImageBrush ImageSource="pictures/basic_front.png" />
</Window.Background>
<Grid>
<TextBox Margin="265,307,970,413" TextWrapping="Wrap" Text="TextBox" FontSize="10"/>
</Grid>
</Window>
最佳答案
发生这种情况是因为当窗口大小更改时边距保持不变。因此,当您减小 Window 的宽度时,TextBox 与左边缘和右边缘的距离保持相同。
如果您必须支持调整大小,那么仅使用 XAML 确实无法做到这一点。如果您可以超越 XAML,则可以将边距绑定(bind)到窗口的高度和宽度,并编写一个转换器来更改边距以正确定位文本框。
如果您实际上不需要支持调整大小,只需将窗口的 ResizeMode 设置为 NoResize 即可。
在图像上定位控件的更好方法是使用 Canvas 而不是 Grid,并将图像放置在 Canvas 内而不是作为窗口背景。然后可以使用 Canvas 属性而不是使用 Margin 将 TextBox 放置在图像上的适当位置。这不会解决调整大小的问题,尽管这样您可以在调整窗口大小时将内容保留其原始大小。
关于c# - 如何使控件根据 WPF 中的背景图像移动/调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616486/