【问题标题】:Have WPF Window resize automatically based on the remaining area in DockPanel让 WPF 窗口根据 DockPanel 中的剩余区域自动调整大小
【发布时间】:2011-11-07 13:47:15
【问题描述】:

我有一个场景,我想动态呈现一个自定义表单对象。此表单类似于 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 x 200,它将创建一个内部尺寸为 250 x 250、内容区域加上两个堆栈面板的窗口。

【问题讨论】:

    标签: wpf resize window dockpanel


    【解决方案1】:

    您可以尝试放置一个控件来填充剩余的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}" />
    

    【讨论】:

    • 好的,我认为我们的思路是对的,但这似乎并不能满足我的需要。我会更新我的问题。
    • @WPFNewbie 尝试在您的&lt;Window ...&gt; 标签中设置SizeToContent="WidthAndHeight"
    • 谢谢,这行得通。但是,我有一个新的限制。我省略了您输入的绑定。相反,在后面的代码中,我指定了 UnusedContent 的宽度和高度。窗口现在在第一次加载时大小完美。但是,我现在的问题是,当调整窗口大小时, UnusedContent 的大小不会改变。我想我想要两全其美。我希望用户能够将浮动窗口拖得更大,并让未使用的区域增长以填充该区域。是否可以通过将窗口初始大小设置为硬编码的未使用区域大小来做到这一点?
    • @WPFNewbie 您可以在&lt;Window&gt;SizeChanged 事件中添加一个处理程序,并在窗口大小更改时调整UnusuedContent 区域的大小
    • 也许我需要回到让窗口设置其大小并相应地设置内容大小。我的问题是设计,我的窗口添加了一个表单控件,表单控件知道它有多少行和列,实际上它是一个网格,但窗口不应该知道表单的大小。从这个意义上说,表单控件设置它的大小并期望容器增长以适应。也许我应该改变这一点,以便表单控件只在给定的区域中绘制。窗口可以查询表单并适当地设置它的大小。你跟着我吗?
    猜你喜欢
    • 2013-03-24
    • 2019-07-31
    • 2019-07-26
    • 2011-11-13
    • 1970-01-01
    • 2017-02-27
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多