Я понимаю, что существует множество способов определения размера дочерних элементов в соответствии с родительскими элементами.Например, если вы используете сетку, вы можете использовать определения строк и столбцов, и вы получите большую свободу в отношении автоматических размеров или фиксированных размеров или «звездных» размеров.Однако, если сами дочерние элементы имеют фиксированную ширину и высоту, то не имеет значения, если родитель говорит дочернему элементу заполнить все доступное пространство.Дочерний элемент останется того же размера.
У меня есть окно, которое было разработано так, чтобы всегда отображать его содержимое с одинаковыми размерами в пикселях, независимо от того, к какому размеру оно изменено.Вместо того, чтобы идти и изменять каждый дочерний элемент на каждой странице XAML, чтобы он не имел фиксированного размера, я бы хотел, чтобы основной Grid
просто масштабировался, чтобы соответствовать окну.Пока что единственный способ получить элементы с фиксированными размерами для отображения в разных размерах - это использовать масштабирование Transform, либо с RenderTransform
или LayoutTransform
.Но если я пойду по этому пути, мне придется кодировать масштабирование в C #, чтобы отвечать на события изменения размера, а не делать это автоматически.Есть ли какой-нибудь встроенный способ сделать это в XAML?Это похоже на то, что я мог бы сделать с каким-то специальным свойством, или, возможно, ContentControl
или ContentPresenter
.
Я видел Изменение размера окна WPF и содержимого, зависящего от экранаразрешение , но он требует обычного изменения размера, а не масштабирования фиксированных элементов.Я также видел Как сделать так, чтобы все элементы управления соответственно пропорционально изменяли размеры при увеличении окна? , и это имеет ту же проблему, хотя второй ответ по крайней мере говорит об обработке событий изменения размера.
Вотупрощенный пример дочернего элемента фиксированного размера, размер которого не изменяется должным образом:
<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>
Фактические результаты:
Желаемые результаты:
Как вы видите, я ищу эффект почтового ящика, то есть я хочу, чтобы соотношение сторон сохранялось.Однако я не нашел способа получить автоматическое масштабирование, даже не беспокоясь о соотношении сторон, поэтому я подумал, что буду рассматривать почтовый ящик как своего рода второй этап, о котором я буду беспокоиться позже.