c# - 如何使控件根据 WPF 中的背景图像移动/调整大小

标签 c# .net wpf xaml

我最近在WPF方面没有做太多事情,所以决定做一些我可以使用的东西,所以首先我尝试制作一些类似交互式表单的东西,以减少纸张的使用。这就是我正在做的,我扫描了原始表单,将其保存为 .png 格式,我将其添加为资源,然后通过以下方式将其设置为窗口的背景图像:

<Window.Background>
    <ImageBrush ImageSource="pictures/podstawowa_front.png" />
</Window.Background>

这工作得很好,但现在在用户要输入一些数据的地方,我想放置 WPF 控件,这也很好。当我想调整窗口大小时,问题就出现了,背景图像的大小调整与控件的大小不同。我尝试过使用不同的控件容器,但似乎都不起作用。还从控件中删除了所有高度、宽度、对齐,并仅留下边距(因此它有一些起始位置)。

示例:

启动时 - 它或多或少处于正确的位置且大小相似:

Application startup

调整窗口大小后:

After resizing window

所以你可以看到我稍微缩小了窗口,但是控件缩小得更多并且根本没有移动。

我尝试过谷歌搜索并寻找类似的问题,但几乎找不到任何东西,试图搞乱不同的容器、转换,但似乎没有任何效果如我所愿。 (我也尝试只使用 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/

相关文章:

c# - 如何使用 WebBrowser 返回 "manually"?

c# - 如何从 Web 应用程序在多个客户端上远程执行程序?

c# - 将文本与多个正则表达式模式匹配的快速方法

c# - 仅接受从特定服务器到我的 asp.net 页面的请求

c# - 使用 C# 绘制楼层 map

c# - WPF 中是否有 BitBlt 的等价物?

c# - 并发互锁和读取是否需要内存屏障或锁定?

.net - 更新 .NET 项目引用(在配置文件中)

c# - 如何在asp.net <%= %> 脚本中使用javascript作为参数

wpf - 无法设置 SelectionChangedCommand.Command