Как избежать того, чтобы окно было меньше минимального размера UserControl в WPF?

У меня есть usercontrol (панель состояния), которая имеет неявный минимальный размер (не заданный через свойство, я имею в виду, что когда он достигает минимального размера, его нельзя уменьшить и обрезать).

Есть ли способ, чтобы главное окно знало, что UserControl будет обрезано и не позволит ему уменьшить его размер? С такой интеллектуальной системой компоновки, как WPF, она должна быть способом, которым она знает, что она обрезает вещи. Посмотрите на следующее изображение:

enter image description here

Ответы

Ответ 1

Включить MinHeight="MinSize" MinWidth="MinSize" в раздел <Window>

MinSize = желаемое целочисленное значение ex 400/350 и т.д.

<Window x:Class="IOTA_WPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" 
    WindowState="Maximized"
    MinHeight="400" MinWidth="650">

Ответ 2

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

Сначала установите окно так, чтобы оно первоначально само по себе соответствовало его содержимому.

<Window ...
    SizeToContent="WidthAndHeight" >

Затем я устанавливаю каждый встроенный элемент управления так, чтобы он сообщал о требуемой ширине и высоте. Большинство встроенных элементов управления делают это за вас. Вы можете сделать это для пользовательских элементов управления, переопределив MeasureOverride или вы можете просто установить ширину и высоту для элемента управления. Сделайте это минимальным размером, который вы хотите получить.

<MyControl Name="_MyControlName" Width="640" Height="480" />

Не беспокойтесь об этих "жестких" закодированных значениях, влияющих на поведение элемента управления. Мы имеем дело с этим следующим. Теперь, когда окно отображается, оно автоматически подстраивается под ваше управление.

Далее подпишитесь на событие, загруженное окном.

<Window ...
    SizeToContent="WidthAndHeight" Loaded="Window_Loaded" >

В событии, загруженном окном, вы можете настроить поведение размера вашего окна и элементов управления в нем. Вы можете сделать это, чтобы ваши элементы управления могли изменять размер. Вы можете установить минимальный размер окна для размера, который вы только что выложили. Преимущество здесь в том, что вы просто позволили системе макета найти хороший макет для вас. Вы хотите использовать его работу.

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // We know longer need to size to the contents.
        ClearValue(SizeToContentProperty);
        // We want our control to shrink/expand with the window.
        _MyControlName.ClearValue(WidthProperty);
        _MyControlName.ClearValue(HeightProperty);
        // Don't want our window to be able to get any smaller than this.
        SetValue(MinWidthProperty, this.Width);
        SetValue(MinHeightProperty, this.Height);
    }

То, что вы размещаете в методе Window_Loaded, будет зависеть от поведения, которое вы пытаетесь выполнить.

Надеюсь, это поможет некоторым другим сэкономить время.

Ответ 3

Вы можете установить свойство MinHeight управления, чтобы оно не уменьшалось по желанию.

Ответ 4

Можете ли вы поместить элементы в сетку с строками, содержащими составные части?

Все элементы, которые должны иметь минимальную высоту, могут идти в строках с одинаковой минимальной высотой.

Добавьте минимальные высоты вверх = Window.MinHeight. Таким образом, окно никогда не может быть меньше коллективных минимальных высот необходимых строк, поэтому эти строки всегда должны отображаться.

Ответ 5

Я думаю, что я помню, где-то читал (возможно, ошибаюсь), что панели стека имеют границы на основе бесконечности и не могут обрабатывать такие проблемы с размером.

Из http://msdn.microsoft.com/en-us/library/ms754152.aspx

DockPanel vs StackPanel

Хотя DockPanel также может "стекать" дочерние элементы, DockPanel и StackPanel не дают аналогичных результатов в некоторых сценариях использования. Например, порядок дочерних элементов может влиять на их размер в DockPanel, но не в StackPanel. Это связано с тем, что StackPanel измеряет в направлении стекирования в PositiveInfinity, тогда как DockPanel измеряет только доступный размер.

Здесь есть раздел сообщения, где он также говорит о вложенных панелях. Какой может быть то, что вам нужно.

Или, может быть, использовать сетку со статусом в нижней строке?