c# - 您如何让 XAML 元素缩放以适合其容器?

标签 c# wpf xaml resize scaling

我知道有多种方法可以根据父元素调整子元素的大小。例如,如果您使用网格,则可以使用行和列定义,并且您可以自由选择自动大小或固定大小或“星形”大小。但是,如果子元素本身具有固定的宽度和高度,那么父元素是否告诉子元素填充所有可用空间都没有关系。子元素将保持相同的大小。

我有一个窗口,无论窗口大小调整到什么大小,它总是以相同的像素尺寸显示其内容。我不想更改每个 XAML 页面中的每个子元素以使其没有固定大小,而是希望让主 Grid 只缩放以适合窗口。到目前为止,让具有固定尺寸的元素以不同尺寸显示的唯一方法是使用变换缩放,使用 RenderTransformLayoutTransform。但如果我走那条路,我将不得不在 C# 中编写缩放比例以响应调整大小事件,而不是让它自动发生。在 XAML 中是否有一些 native 内置的方法来执行此操作?这感觉像是我应该能够使用某些特殊属性或 ContentControlContentPresenter 来做的事情。

我看过 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>

实际结果:

Blue rectangle that's always the same size

期望的结果:

Blue rectangle that scales to fill its window

如您所见,我正在寻找一种信箱效果,这意味着我希望保持宽高比。但是,我还没有找到一种无需担心宽高比即可实现自动缩放的方法,因此我认为我应该将信箱设置视为一种我稍后会担心的第二阶段。

最佳答案

您要找的控件是一个Viewbox .它会增长以填充其容器(您可以为信箱设置拉伸(stretch)样式)并相应地缩放其所有内容。只需将其作为您应用程序的根元素(或任何您想要扩展的元素):

<Viewbox>
    <Grid> //Or whatever
         <OtherStuff>
    </Grid>
</Viewbox>

请注意,由于 View 框正在缩放其内容,因此传统的 Grid 行为和类似行为将停止工作,因为内容的大小实际上从未改变。

关于c# - 您如何让 XAML 元素缩放以适合其容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536041/

相关文章:

c# - Listpicker 无法进入全屏模式 Windows Phone

.net - 列表框中带有 TargetNullValue 的 DataTemplate

C# - 二进制序列化 InvalidCastException

c# - "The description for Event ID X in Source Y cannot be found."

c# - WPF 绑定(bind) : ! 值

wpf - 点击图像但仍然响应鼠标悬停?

wpf - 从 WPF RichTextBox 中的行号计算 ScrollToVerticalOffset 的偏移量

xaml - 银光 5 : Set ConstructorArgument on a IMarkupExtension class

c# - 在aspx页面中访问方法变量背后的代码

c# - Linq 性能和延迟执行