让WPF窗口根据DockPanel中的剩余区域自动调整大小

时间:2011-11-07 13:47:15

标签: wpf resize window dockpanel

我有一个想要动态渲染自定义表单对象的场景。此表单类似于WinForms表单。它将显示一个或多个按钮栏,按钮只能在我们的实现中的按钮栏中,以及用户将用于数据输入的众多编辑控件。

在渲染表单中,我们在配置文件中有行高和列宽,两者都是应用程序区域的百分比。所有表单共享一个共同的行高和列宽。这些的实际设备单位值是根据应用初始化计算的。

我的问题是调整表单大小。例如,我有一个应该是15行乘80列的表单,假设这个转换为500个单位高和800个单位宽。这将是表单区域,不包括按钮栏。现在我在FormPreviewManager中计算窗口的高度和宽度。然而,这很麻烦,因为我必须给出总单位,包括按钮栏和窗口边框的大小,这可能会改变,因为他们可以选择在浮动窗体窗口中包括标题栏。

在表单的渲染中,我使用DockPanel渲染按钮栏,并将剩余空间声明为我的行和列网格。我尝试创建按钮栏,将剩余空间设置为我的FormGrid对象,然后专门设置FormGrid的宽度和高度,但它不会改变包含窗口的大小。

如何才能使浮动窗口自动调整大小?我希望能够绘制按钮栏然后说剩余空间是500个单位高和800个单位宽,然后窗口调整到保持这些数据所需的任何大小,不多也不少。

任何有关这方面的帮助或其他可能的方法都会很棒。

更新

基本上如果这是我窗口的整个XAML定义,我希望能够设置UnusedContent的宽度和高度,并相应地调整窗口大小。

<Grid>
    <DockPanel>
        <StackPanel DockPanel.Dock="Top" Height="50" />
        <StackPanel DockPanel.Dock="Left" Width="50" />
        <ContentControl x:Name="UnusedContent" />
    </DockPanel>
</Grid>

如果我将UnusedContent设置为200乘200,它将创建一个内部尺寸为250乘250的窗口,内容区域加上两个堆栈面板。

1 个答案:

答案 0 :(得分:0)

您可以尝试放置一个控件来填充剩余的DockPanel空格,然后绑定到该控件的ActualHeightActualWidth属性

<DockPanel>
    <StackPanel DockPanel.Dock="Top" Height="50" />
    <StackPanel DockPanel.Dock="Left" Width="100" />
    <ContentControl x:Name="Spacer" />
</DockPanel>

<Grid Height="{Binding ElementName=Spacer, Path=ActualHeight}"
      Width="{Binding ElementName=Spacer, Path=ActualWidth}" />