如何在C#WPF中获得菜单栏、水平按钮行和数据网格



我很沮丧。来自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>

您的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>

最新更新