c# - 如何在 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
,将默认填充 a 中的剩余空间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>
推荐阅读
- python - tf.py_function 无法返回列表?
- javascript - 来自 rrule.between 的空响应
- c# - SQL Server / EF Core 不尊重来自客户端的日期
- mongodb - MongoDB Compass 无法在 macOS Catalina 10.15.1 中打开
- python - sklearn shuffle train_test_split 不打乱标签和输入以匹配
- bash - 为什么将命令通过管道传输到 bash 与 bash 使用命令读取文件时的行为会有所不同?
- idl-programming-language - IDL v.8.7.2 中无法识别的基本数据类型
- r - 如何在 mutate 中以编程方式使用多项式函数?
- ajax - ReferenceError:formData 未定义
- docusignapi - 如何检索已排序的文本选项卡值?