я пытался сохранить пропорции элементов (Border) при помощи матана, но это не увенчалось успехом, так что хотелось узнать, как лучше и грамотнее реализовать подгон интерфейса

Asked
Active
Viewed 73 times
0
Андрей NOP
- 28,687
-
Опишите задачу подробнее, какую именно пропорцию вы хотите сохранить? – Андрей NOP Sep 11 '23 at 10:46
-
я бы хотел сохранить относительный размер фрагментов, те, чтобы при изменении размера окна общий вид сохранялся (при уменьшении окна уменьшались и элементы а при увеличении увеличивались) – TABURELTER Sep 11 '23 at 11:42
-
То, что у вас сверху все сплющилось означает то, что вы не так разместили элементы, не так настроили сетку. Если вам надо, чтобы у элементов менялся размер, то используйте ViewBox. – EvgeniyZ Sep 11 '23 at 11:56
1 Answers
0
решение в лоб - стандартными средствами:
<Grid Name="grdBody">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="5*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Border Name="brd1" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="6" Grid.RowSpan="1" Background="RosyBrown" SizeChanged="brd1_SizeChanged">
<Label Name="lbl1" Margin="0,2,0,2" Padding="4" Background="Brown" HorizontalAlignment="Center" Content="Time and Day" VerticalAlignment="Center"/>
</Border>
<Border Name="brd2" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Grid.RowSpan="1" Background="Wheat">
<Label Name="lbl2" Margin="0,2,0,2" Padding="4" Background="Brown" HorizontalAlignment="Center" Content="weather day" VerticalAlignment="Center"/>
</Border>
<Border Name="brd3" Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="4" Grid.RowSpan="1" Background="LightBlue">
<Label Name="lbl3" Margin="0,2,0,2" Padding="4" Background="Brown" HorizontalAlignment="Center" Content="weather weak" VerticalAlignment="Center"/>
</Border>
<Border Name="brd4" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Grid.RowSpan="1" Background="Silver">
<Label Name="lbl4" Margin="0,2,0,2" Padding="4" Background="Brown" HorizontalAlignment="Center" Content="NET чотатам" VerticalAlignment="Center"/>
</Border>
<Border Name="brd5" Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="3" Grid.RowSpan="1" Background="DarkBlue">
<Label Name="lbl5" Margin="0,2,0,2" Padding="4" Background="Brown" HorizontalAlignment="Center" Content="app status" VerticalAlignment="Center"/>
</Border>
</Grid>
и
private void brd1_SizeChanged(object sender, SizeChangedEventArgs e)
{
double h1 = brd1.ActualHeight;
if (h1 < 18 || double.IsNaN(h1) || double.IsInfinity(h1))
return;
double h2 = h1 - 18;
lbl1.FontSize = h2;
lbl2.FontSize = h2;
lbl3.FontSize = h2;
lbl4.FontSize = h2;
lbl5.FontSize = h2;
}
масштабирование текста исключительно от высоты 1й строки, а её высота - от высоты всего окна... но общий смысл, я думаю, понятен)
Spectral Owl
- 13
-
Тут кстати вы тоже пошли в такие дебри, когда можно было просто обернуть весь (или только нужные элементы) в стандартный
ViewBox, задачка решается чисто XAML разметкой, а вы тут свои костыли пишете... Не, решение мб и уместно, но не представляю кто будет подобное писать) – EvgeniyZ Sep 11 '23 at 15:11