Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让WPF窗口根据DockPanel中的剩余区域自动调整大小_Wpf_Resize_Window_Dockpanel - Fatal编程技术网

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

让WPF窗口根据DockPanel中的剩余区域自动调整大小,wpf,resize,window,dockpanel,Wpf,Resize,Window,Dockpanel,我有一个场景,我想动态地呈现一个自定义表单对象。此表单类似于WinForms表单。它将显示多个按钮栏中的一个,在我们的实现中,按钮只能位于一个按钮栏中,以及用户将用于数据输入的许多编辑控件 在呈现表单时,我们在配置文件中有一个行高和列宽,两者都作为应用程序区域的百分比。所有表单共享一个共同的行高和列宽。这些设备的实际设备单位值在应用程序初始化时计算 我的问题是调整表单的大小。例如,我有一个表单,应该是15行乘80列,假设这转换为500个单元高和800个单元宽。这将是表单区域,不包括按钮栏。现在我

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

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

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

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

如何使浮动窗口自动调整大小?我希望能够画出按钮条,然后说剩余空间是500个单位高,800个单位宽,然后调整窗口的大小以容纳这些数据,不多也不少

这方面的任何帮助,或者其他可能的方法,都将是非常好的

更新

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

<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的窗口,内容区域加上两个堆栈面板。

您可以尝试放置一个控件来填充剩余的
DockPanel
空间,然后绑定到该控件的
实际高度
实际宽度
属性

<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请尝试在您的
标记中设置
SizeToContent=“widthandheath”
。谢谢,这很有效。然而,我有一个新的限制。我遗漏了你放进去的装订。相反,在代码背后,我指定了未使用内容的宽度和高度。窗口现在在首次加载时大小完全相同。然而,我现在的问题是,当调整窗口大小时,未使用的内容的大小不会改变。我想我想要两全其美。我希望用户能够拖动浮动窗口更大,并有未使用的面积增长,以填补该地区。有没有可能做到这一点,,通过将窗口的初始大小设置为硬编码的未使用区域大小?@WPFNewbie,您可以在
SizeChanged
事件中添加一个处理程序,并在窗口大小更改时调整
未使用的内容
区域的大小。我需要重新设置窗口的大小,并相应地调整内容大小。我的问题是设计,我的窗口添加了一个表单控件,表单控件知道它有多少行和列,实际上它是一个网格捕捉,但是窗口不应该知道表单的大小。从这个意义上说,表单控件设置它的大小,并期望容器增长以适应。也许我应该改变这一点,以便表单控件只在给定的区域中绘制。窗口可以查询表单并适当设置其大小。你听懂了吗?