我正在开发一个C#WPF项目,我正在使用用户控件,但是我在调整父窗口大小时调整大小时遇到了问题。
我有一个名为MainWindow的窗口,其中包含一个托管用户控件的画布。调整主窗口大小时,用户控件也应调整大小。这是一个较少工作,除了它似乎没有填满谁的屏幕。下面是解释我的意思的代码和截图。
主窗口
以下是主窗口的代码,此窗口将托管用户控件
<Window x:Class="ReportReader.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="513" Width="925" WindowStartupLocation="CenterScreen">
<Grid>
<Menu Height="23" Name="menu1" VerticalAlignment="Top">
<MenuItem Name="mnuFile" Header="File">
<MenuItem Name="mnuOpen" Click="mnuOpen_Click" Header="Open" />
<MenuItem Name="mnuClose" Click="mnuClose_Click" Header="Close Report" />
<MenuItem Name="mnuRecentFile" Header="Recent Files" />
<Separator />
<MenuItem Name="mnuExit" Click="mnuExit_Click" Header="Exit" InputGestureText="Alt+F4" />
</MenuItem>
</Menu>
<StatusBar Name="statusBar1" Height="28" VerticalAlignment="Bottom" />
<Label Content="No Report Loaded" Name="lblStatus" Height="28" VerticalAlignment="Bottom" Margin="0,0,39,0" />
<Grid Margin="12,29,12,34" Name="MainWindowHostCanvas" Background="Blue" />
</Grid>
</Window>
画布为蓝色,因此它在屏幕截图中显示了我的问题。
以下是其中一个用户控件的代码
<UserControl x:Class="ReportReader.UserControls.ReportViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignWidth="879">
<Grid Height="415">
<Label Content="Report for..." Margin="12,12,12,0" Name="lblReportDateTitle" FontSize="26" FontWeight="Bold" HorizontalContentAlignment="Center" Height="44" VerticalAlignment="Top" />
<ComboBox Height="23" HorizontalAlignment="Left" Margin="12,62,0,0" Name="cboRegisteredApps" VerticalAlignment="Top" Width="202" SelectionChanged="cboRegisteredApps_SelectionChanged">
<ComboBoxItem Content="Select App" IsSelected="True" />
</ComboBox>
<DataGrid AutoGenerateColumns="False" Margin="14,203,12,12" Name="dataExceptionGroups" />
</Grid>
</UserControl>
下面是程序首次加载时主窗口托管的用户控件的屏幕截图。
如您所见,蓝色画布将整个窗口填充到状态栏,数据网格位于窗口底部,位于状态栏上方,报表标题位于窗口顶部的菜单上方酒吧。
以下是窗口已调整大小的屏幕截图
正如您在此屏幕截图中看到的那样,窗口已调整大小并且蓝色画布已调整大小以填充额外空间,但是,数据网格不再位于窗口底部,位于状态栏上方而是围绕中间。顶部的标题不再仅仅位于菜单栏下方,而且位于中间。
我不知道我能做些什么来解决这个问题。
感谢您提供的任何帮助。
答案 0 :(得分:1)
如果设置了Height =“*”,那么所有行将平等地共享可用空间。如果你想设置%,那么你可以设置这样的东西
<Grid.RowDefenitions>
<RowDefenition Height="10*"/>
<RowDefenition Height="20*"/>
<RowDefenition Height="60*"/>
<RowDefenition Height="10*"/>
</Grid.RowDefenitions>
现在,当窗口重新调整大小时,所有行都将共享相同的百分比
所有行中的高度值不一定总和为100.例如,如果您有三行,那么您也可以设置如下
<Grid.RowDefenitions>
<RowDefenition Height="20*"/>
<RowDefenition Height="30*"/>
<RowDefenition Height="10*"/>
</Grid.RowDefenitions>
然后总窗口大小将在所有三行之间划分如下
第一行高度的将是WindowSize * 20 /(20 + 30 + 10)
对于第二行高度将是WindowSize * 30 /(20 + 30 + 10)
对于第3行高度将是WindowSize * 10 /(20 + 30 + 10)
当重新调整窗口大小时,所有行大小都会相应地重新调整大小
答案 1 :(得分:1)
Grid
中的UserControl
已将Height
设置为415,这就是为什么它不会延伸:
<UserControl>
<Grid Height="415">
如果您正在使用设计器来创建界面,那么它倾向于将这些属性设置为固定值。
答案 2 :(得分:0)
您正在使用静态大小调整,边距和高度与硬编码值。
1)删除边距高度和宽度的所有硬编码值。
2)使用行/列定义拆分网格,相对高度使用*,FYI可以设置MinHeight 在RowDefenition上。
<Grid>
<Grid.RowDefenitions>
<RowDefenition Height="*"/>
<RowDefenition Height="*"/>
<RowDefenition Height="*"/>
<RowDefenition Height="*"/>
</Grid.RowDefenitions>
<Menu>
.....
</Menu>
<StatusBar Grid.Row="1"/>
<Label Content="No Report Loaded" Grid.Row="2" />
<Grid Grid.Row="3" />
</Grid>
对UserControl执行相同的操作。