Хочу сделать окно с полем ввода. При открытии окна высота поля ввода TextBox должна быть строго 100 px, а размер окна должен подстроиться под высоту TextBox. Но после открытия окна, если менять его размеры, высота TextBox тоже должна меняться.
Способ задать высоту окна не подходит, потому что тогда высота TextBox при разных темах Windows будет разная.
<Window SizeToContent="Height">
<TextBox Margin="20"
InitialHeight="100" />
</Window>
UPD:
Упрощаем задачу: как задать, чтобы высота рабочей области окна при открытии была 100 px, но потом менялась вместе с размером окна?
<Window SizeToContent="Height">
<Grid Height="100" Background="Yellow" />
</Window>
Первое решение оказалось сложным:
public MainWindow()
{
InitializeComponent();
textBox.Height = 100;
double firstHeight = 0;
this.SizeChanged += (s, e) => // TODO: отписаться от события
{
if (firstHeight == 0)
firstHeight = this.Height;
else if (this.Height != firstHeight)
textBox.Height = double.NaN;
}
}
Второе решение получилось намного изящней:
<Window SizeToContent="Height">
<TextBox Margin="20" Height="100" />
</Window>
public MainWindow()
{
InitializeComponent();
Loaded += (s, e) =>
{
ClearValue(SizeToContentProperty); // this.SizeToContent = SizeToContent.Manual;
textBox.ClearValue(HeightProperty); // textBox.Height = double.NaN;
};
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости