WPF: растянуть прямоугольник, если соотношение сторон> 16: 9, масштабировать иначе - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь поместить прямоугольник в сетку в окне, которое будет регулярно менять размер.Я работаю не с абсолютными значениями, а с коэффициентами.

Итак, существует три состояния, которые прямоугольник может иметь относительно окна / сетки:

  • Соотношение сторон по умолчанию дляокно 16: 9.Если окно имеет этот размер, прямоугольник должен идеально вписываться в окно, заполняя окно;
  • Если ширина окна больше этого, прямоугольник должен растягиваться вместе с ним.(Таким образом, если соотношение сторон окна> 16/9, прямоугольник расширяет его ширину, тем самым заполняя все окно);
  • Если высота окна больше, чем соотношение 16: 9, прямоугольник внутри должен (1) не растягивать по вертикали, и (2) выровнять по нижней части сетки.

Это изображение объясняет это намного яснее

Я смотрюдля решения, которое не включает изменение кода, отличного от XAML, (поэтому ничего в файле .cs), если нет другого пути.Я пытался найти решение с помощью кода C #:

RectName_OnSizeChanged(object sender, SizeChangedEventArgs) {
    RectName.MaxHeight = 9/16 * RectName.Width;
}

, но, похоже, оно не работает.(Так почему это мой бонусный вопрос)

1 Ответ

0 голосов
/ 05 марта 2019

Как насчет этого:

<Grid Background="CornflowerBlue" SizeChanged="ParentSizeChanged">
    <Rectangle x:Name="theRect" Fill="Blue" HorizontalAlignment="Left" VerticalAlignment="Bottom" />
</Grid>

И это:

private void ParentSizeChanged(object sender, SizeChangedEventArgs e)
{
    var parent = sender as FrameworkElement;
    if (parent == null)
        return;
    theRect.Width = parent.ActualWidth;
    theRect.Height = Math.Min(parent.ActualHeight, parent.ActualWidth * 6 / 9);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...