Сейчас у меня возникла проблема с элементами управления, которые могут отображать переменные данные неопределенного размера. Например, 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
Контроль размера по доступному пространству, а не по содержимому ⇐ C#
Место общения программистов C#
-
Anonymous
1726587567
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78994804/size-control-by-available-space-not-contents[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия