Контроль размера по доступному пространству, а не по содержимомуC#

Место общения программистов C#
Ответить
Anonymous
 Контроль размера по доступному пространству, а не по содержимому

Сообщение Anonymous »

Сейчас у меня возникла проблема с элементами управления, которые могут отображать переменные данные неопределенного размера. Например, TextBox, отображающий длинный путь к файлу, или ListBox, отображающий сообщения об ошибках. Это может иметь отношение к другим элементам управления, но сейчас я борюсь с двумя конкретными.
По сути, я хочу, чтобы эти элементы управления расширялись, чтобы заполнить доступное пространство (растущие и сжимающиеся, если размер самого окна изменяется), но я не хочу, чтобы их содержимое вообще влияло на их размер. Прямо сейчас, когда я использую текстовое поле, если я дам ему текст, превышающий его размер, он расширится, чтобы соответствовать содержимому, и окно станет больше. Это не то, что я хочу.
Одно из решений, которое я придумал, — наследовать новый класс от 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
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... t-contents
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»