как получить строку меню, горизонтальный ряд кнопок и сетку данных в C# WPF - PullRequest
0 голосов
/ 05 августа 2020

Я так расстроен. Исходя из C ++ / MFC / Win API, где я мог бы просто перехватить обработчик WM_SIZE / OnSize (), как мне заставить это работать в WPF. Мне нужна горизонтальная строка меню, один ряд кнопок, а затем сетка данных. Что я делаю не так?

<DockPanel HorizontalAlignment="Stretch">
        <Menu DockPanel.Dock="Top" Background="Black" Foreground="White" HorizontalContentAlignment="Stretch">
            <MenuItem Header="_Data" Background="Black" Foreground="White">
                <MenuItem Header="_Exit"  Background="Black" Foreground="White"  Click="App_Exit_Click"/>
            </MenuItem>
            <MenuItem Header="_Client" Background="Black" Foreground="White">
                <MenuItem Header="_New"  Background="Black" Foreground="White"  Click="New_Client_Click"/>
            </MenuItem>
        </Menu>
    <StackPanel Orientation="Vertical" VerticalAlignment="Stretch">
        <StackPanel HorizontalAlignment="Stretch" Height="Auto" VerticalAlignment="Top" Orientation="Horizontal">
            <Button x:Name="NewClient" Width="80" Height="80" Content="New" Foreground="White"  Click="New_Client_Click" HorizontalAlignment="Left" HorizontalContentAlignment="Center">
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="#FF141420" Offset="0"/>
                        <GradientStop Color="#FF203060" Offset="1"/>
                    </LinearGradientBrush>
                </Button.Background>

            </Button>
            <Button x:Name="Sync" Width="80" Height="80" Content="Sync" Foreground="White"  Click="New_Client_Click" HorizontalAlignment="Left" HorizontalContentAlignment="Center">
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="#FF141420" Offset="0"/>
                        <GradientStop Color="#FF203060" Offset="1"/>
                    </LinearGradientBrush>
                </Button.Background>

            </Button>
        </StackPanel>
        <DataGrid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="414"/>
    </StackPanel>


</DockPanel>

1 Ответ

0 голосов
/ 06 августа 2020

Ваш DataGrid имеет фиксированный Height, поэтому он не может занимать оставшееся место в вашем окне. Более того, окружающий StackPanel будет измерять своих дочерних элементов с положительной бесконечностью, что заставляет их увеличивать размер до наименьшего размера, который соответствует их содержимому, а это противоположно тому, что вы хотите.

У вас просто закреплена кнопка бар наверх. Последний элемент, это DataGrid, по умолчанию заполнит оставшееся пространство в DockPanel. Я удалил избыточные атрибуты, которые установлены по умолчанию в приведенном ниже коде.

<DockPanel>
   <Menu DockPanel.Dock="Top" Background="Black" Foreground="White">
      <MenuItem Header="_Data" Background="Black" Foreground="White">
         <MenuItem Header="_Exit" Background="Black" Foreground="White" Click="App_Exit_Click"/>
      </MenuItem>
      <MenuItem Header="_Client" Background="Black" Foreground="White">
         <MenuItem Header="_New" Background="Black" Foreground="White" Click="New_Client_Click"/>
      </MenuItem>
   </Menu>
   <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
      <Button x:Name="NewClient" Width="80" Height="80" Content="New" Foreground="White" Click="New_Client_Click">
         <Button.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
               <GradientStop Color="#FF141420" Offset="0"/>
               <GradientStop Color="#FF203060" Offset="1"/>
            </LinearGradientBrush>
         </Button.Background>
      </Button>
      <Button x:Name="Sync" Width="80" Height="80" Content="Sync" Foreground="White" Click="New_Client_Click">
         <Button.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
               <GradientStop Color="#FF141420" Offset="0"/>
               <GradientStop Color="#FF203060" Offset="1"/>
            </LinearGradientBrush>
         </Button.Background>
      </Button>
   </StackPanel>
   <DataGrid/>
</DockPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...