我知道有多种方法可以根据父元素调整子元素的大小。例如,如果您使用网格,则可以使用行和列定义,并且您可以自由选择自动大小或固定大小或“星形”大小。但是,如果子元素本身具有固定的宽度和高度,那么父元素是否告诉子元素填充所有可用空间都没有关系。子元素将保持相同的大小。
我有一个窗口,无论窗口大小调整到什么大小,它总是以相同的像素尺寸显示其内容。我不想更改每个 XAML 页面中的每个子元素以使其没有固定大小,而是希望让主 Grid
只缩放以适合窗口。到目前为止,让具有固定尺寸的元素以不同尺寸显示的唯一方法是使用变换缩放,使用 RenderTransform
或 LayoutTransform
。但如果我走那条路,我将不得不在 C# 中编写缩放比例以响应调整大小事件,而不是让它自动发生。在 XAML 中是否有一些 native 内置的方法来执行此操作?这感觉像是我应该能够使用某些特殊属性或 ContentControl
或 ContentPresenter
来做的事情。
我看过 Resize WPF Window and contents depening on screen resolution但它询问的是常规调整大小而不是缩放固定元素。我也看过 How to make all controls resize accordingly proportionally when window is maximized?尽管第二个答案至少讨论了处理调整大小事件,但它有同样的问题。
这是一个固定尺寸子元素未按需要调整大小的简化示例:
<Window x:Class="WpfTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Window1" Height="200" Width="300" Background="LightBlue">
<Grid>
<Frame Background="Blue" Width="200" Height="100">
</Frame>
</Grid>
</Window>
实际结果:
期望的结果:
如您所见,我正在寻找一种信箱效果,这意味着我希望保持宽高比。但是,我还没有找到一种无需担心宽高比即可实现自动缩放的方法,因此我认为我应该将信箱设置视为一种我稍后会担心的第二阶段。
最佳答案
您要找的控件是一个Viewbox
.它会增长以填充其容器(您可以为信箱设置拉伸(stretch)样式)并相应地缩放其所有内容。只需将其作为您应用程序的根元素(或任何您想要扩展的元素):
<Viewbox>
<Grid> //Or whatever
<OtherStuff>
</Grid>
</Viewbox>
请注意,由于 View 框正在缩放其内容,因此传统的 Grid
行为和类似行为将停止工作,因为内容的大小实际上从未改变。
关于c# - 您如何让 XAML 元素缩放以适合其容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536041/