По сути, я хочу, чтобы эти элементы управления расширялись, чтобы заполнить доступное пространство (растущие и сжимающиеся, если размер самого окна изменяется), но я не хочу, чтобы их содержимое вообще влияло на их размер. Прямо сейчас, когда я использую текстовое поле, если я дам ему текст, превышающий его размер, он расширится, чтобы соответствовать содержимому, и окно станет больше. Это не то, что я хочу.
Одно из решений, которое я придумал, — наследовать новый класс от TextBox (NonBloatingTextBox), переопределив функцию MeasureOverride, но это кажется как неоправданно грубый способ сделать что-то, что, по моему мнению, уже должно быть выполнимо.
Я использую в основном DockPanels, Grids и StackPanels для макета, поэтому я не полагаюсь на фиксированное позиционирование. В некоторых моих окнах я могу изменять размер, но в других я отключаю изменение размера и делаю их SizeToContent. Я бы хотел, чтобы это решение работало в обеих ситуациях.
Существует ли в WPF способ расширения и сжатия элементов управления для заполнения доступного пространства, но не принудительного расширения на основе их содержимого?< /p>
Я пробовал настройки «Горизонтальное/Вертикальное выравнивание = Растягивание» различными способами, но, честно говоря, я даже не знаю, какое влияние эта настройка оказывает на различные макеты. панели, поэтому я даже не знаю, правильно ли я это делаю или нет.
Справочный код для упомянутого мной NonBloatingTextBlock. Кажется, это работало каждый раз, когда я его использовал, но похоже, что это должна быть встроенная функция, а не пустяк.
[DesignTimeVisible(true)]
public class NonBloatingTextBox : TextBox
{
protected override Size MeasureOverride(Size constraint)
{
return MinimumDesiredSize;
}
#region Private static properties
private static Size MinimumDesiredSize { get; set; }
#endregion
#region static constructor
public NonBloatingTextBox()
{
MinimumDesiredSize = base.MeasureOverride(new Size(double.PositiveInfinity, double.PositiveInfinity));
}
#endregion
}
ETA: Вот два снимка экрана, показывающие рассматриваемое поведение. Текст внизу показывает ActualHeight и ActualWidth элемента управления, поэтому вы можете увидеть разницу в ширине между ними. Конкретно я хочу, чтобы второй был такой же ширины, как и первый. Я хочу, чтобы ListBox расширялся на всю ширину доступного пространства, но не хочу, чтобы содержимое принудительно расширяло окно, как сейчас.


И для справки, вот весь WPF, которым я управляю. Это UserControl, который при отображении размещается как единственное содержимое окна. Единственные настраиваемые элементы управления — это NonBloatingTextBox, который я уже опубликовал, и ControlPadding, который просто наследует от Border и больше ничего не делает, поэтому я могу установить согласованное расстояние между виджетами и контролировать это расстояние с помощью стиля, не испортив внутренние границы, из которых состоят другие элементы управления.
License Status:
User Name:
Machine Name:
PCID:
Valid
Invalid
Recheck License
Save Registration File
Подробнее здесь: https://stackoverflow.com/questions/789 ... t-contents
Мобильная версия