c# - 调整父窗口大小时自动调整用户控件的大小

标签 c# wpf window-resize

我正在开发一个 C# WPF 项目,并且正在使用用户控件,但是当调整父窗口大小时,我遇到了调整大小工作的问题。

我有一个名为 MainWindow 的窗口,其中包含一个用于托管用户控件的 Canvas 。当主窗口调整大小时,用户控件也应该调整大小。这更像是一个不太有效的方法,只是它似乎没有填满谁的屏幕。下面是代码和屏幕截图来解释我的意思。

主窗口

下面是主窗口的代码,该窗口将托管用户控件

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

Canvas 是蓝色的,因此它在屏幕截图中显示了我的问题。

下面是其中一个用户控件的代码

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

下面是程序首次加载时主窗口托管的用户控件的屏幕截图。

Screenshot from when application first loaded 正如您所看到的,蓝色 Canvas 填充了整个窗口,直到状态栏,数据网格位于窗口底部,状态栏上方,报表标题位于窗口顶部菜单上方酒吧。

下面是窗口大小已调整后的屏幕截图

Screenshot of window after it has been resized 正如您从该屏幕截图中看到的,窗口已调整大小,蓝色 Canvas 已调整大小以填充额外的空间,但是,数据网格不再位于窗口底部,位于状态栏上方,而是 float 在状态栏周围中间。而且顶部的标题不再位于菜单栏的正下方,而是位于中间。

我不知道我能做些什么来解决这个问题。

感谢您提供的任何帮助。

最佳答案

UserControl 中的 Grid 已将 Height 固定设置为 415,这就是它不拉伸(stretch)的原因:

<UserControl>
    <Grid Height="415">

如果您使用设计器来创建界面,那么它倾向于将这些属性设置为固定值。

关于c# - 调整父窗口大小时自动调整用户控件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032574/

相关文章:

c# - 如何在类中的类的属性上使用 INotifyPropertyChanged..?

macos - 不可调整大小的窗口 swift

jquery - 根据窗口宽度和窗口调整大小启用功能

c# - ViewBag 属性已设置但不可访问

c# - 如何与中间的链接表建立多对一关系?

c# - 打开另一个应用程序的系统菜单

javascript - 使元素仅在窗口缩小时水平移动

c# datetime 值基于当前日期传递

c# - 获取列表框中所选项目的值作为字符串

c# - 如何防止 WPF TreeView 在多个项目上引发 MouseEnter?