WPF. Правильная разметка главного окна

Рейтинг: 0Ответов: 0Опубликовано: 13.06.2023

Всем добрый день!!! Проектирую под свою программу визуальный интерфейс, пишу разметку xaml-кода.

<Window x:Class="URLDuplicate.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="URLDuplicate" Height="450" Width="800" MinHeight="350" MinWidth="450"
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" WindowStartupLocation="CenterScreen" Icon="/Resources/MainIcon.png">
<!-- Определяем ресурсы для окна -->
<Window.Resources>
    <!-- Определяем стиль для кнопки с ключом "SearchButtonStyle" -->
    <Style x:Key="SearchButtonStyle" TargetType="Button">
        <!-- Задаем фоновый цвет кнопки -->
        <!--<Setter Property="Background" Value="#FF1E90FF"/>-->
        <Setter Property="Background" Value="#41A5EE"/>
        <!-- Задаем цвет текста на кнопке -->
        <Setter Property="Foreground" Value="White"/>
        <!-- Задаем минимальную ширину кнопки -->
        <Setter Property="MinWidth" Value="75"/>
        <!-- Определяем шаблон кнопки -->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <!-- Определяем внешний вид кнопки через Border -->
                    <Border Background="{TemplateBinding Background}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        Padding="{TemplateBinding Padding}">
                        <!-- Определяем, как будет выводиться содержимое кнопки -->
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="318*"/>
        <RowDefinition Height="35"/>
    </Grid.RowDefinitions>

    <Menu Grid.Row="0"  Margin="10,0,0,10"  Background="{x:Null}" >
        <MenuItem Header="Меню" Padding="0,0,0,0">
            <MenuItem x:Name="OpenFile" Header="Открыть" Click="OpenFile_Click" />
            <MenuItem x:Name="SaveFile" Header="Сохранить" Click="SaveFile_Click" />
        </MenuItem>
    </Menu>
    
    <TextBlock HorizontalAlignment="Left" Margin="10,20,0,0" Grid.Row="0" TextWrapping="Wrap" Text="Путь к файлу:" VerticalAlignment="Top" FontWeight="Bold"/>
    
   <Grid Grid.Row="1" Margin="10,5,10,5">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBox x:Name="PathTextBox" Text="D:\[Kawaiika-Raws] (2013) Shingeki no Kyojin S1 [BDRip 1920x1080 HEVC FLAC]\Bonus\Scans" VerticalAlignment="Center" Margin="0,0,10,0" Grid.Column="0" Background="{x:Null}"/>
        <Button x:Name="SearchButton" Content="Поиск" Style="{StaticResource SearchButtonStyle}" Click="SearchButton_Click" Grid.Column="1"/>
    </Grid>
    
    <TextBlock Grid.Row="2" TextWrapping="Wrap" Text="Результат" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,5,0,5"/>
    <ScrollViewer Grid.Row="3" VerticalScrollBarVisibility="Auto" Margin="10,0,10,0">
        <TextBox x:Name="ResultTextBox" TextWrapping="Wrap" Text="Ваш неизменяемый текст здесь" IsReadOnly="True" Background="{x:Null}"/>
    </ScrollViewer>
    <StatusBar Grid.Row="4" Margin="10,0,10,10" Background="{x:Null}" >
        <StatusBarItem>
            <Image x:Name="StatusBarIcon" Source="Resources/Good.png" />
        </StatusBarItem>
        <Separator/>
        <StatusBarItem>
            <TextBlock Text="Режим работы: Редактирование"/>
        </StatusBarItem>
    </StatusBar>
</Grid>

Есть TextBlock "Путь к файлу:". Как бы я не пытался, он по отступам сверху ориентируется не на элемент управления Menu, а считает отступ от верха, т.е. налезает на Menu. Пробовал его в StackPanel вместе с текстбоксом и кнопкой ставить, пробовал группировать с Menu - все это в итоге с элементом управления Menu плохо взаимодействует. Как вписать этот Textblock, чтоб он по отступам нормально вписался? Да и вообще, можете ли мне дать советы по разметке? Как лучше размещать элементы управления? Кто-то делает сложную сетку, кто-то спамит StackPanel'ом, у меня вот сетка, а в сетке еще сетка (думаю, это тоже не совсем правильно)... P.S. Гугл не помог, ChatGPT по итогу сам запутался)

Ответы

Ответов пока нет.