WPF 如何把子窗口放到主窗口的Panel中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 如何把子窗口放到主窗口的Panel中?相关的知识,希望对你有一定的参考价值。

设计的是个窗体,点主窗体的左侧按钮,右侧会出现一个新界面,左侧有很多按钮,所以右侧就会相应有很多的界面,我打算把子窗体当成界面,放到主窗体的StackPanel 中,请问如何实现?谢谢~

WPF应该是不支持MDI的。要实现这样的效果,除非你自己制作一个看起来像是窗口的控件。 参考技术A 你winform实现的时候也是UserContorl 吧,难道你在winform里也是把form添加到panel中了吗?追问

Winform 可以把子form 加入到Panel, 以下代码可以实现
this.panel.Controls.Clear();
ChildWindow cw = new ChildWindow();
cw.TopLevel = false;
cw.Show();
this.panel.Controls.Add(cw);

参考技术B 好像没看到这么做的,用得是 MDI 嘛?追问

以前Winform经常这么做,很好实现,查了很多感觉WPF貌似没有简单实现的方法,有人说用 UserContorl 就可以,请问知道这种方法吗?

追答

UserContorl用户控件,自己写得吧。这个不了解,不要意思帮不了你咯。

本回答被提问者采纳

如果它比 WPF XAML 中的窗口大,如何缩放字体大小以适应窗口?

【中文标题】如果它比 WPF XAML 中的窗口大,如何缩放字体大小以适应窗口?【英文标题】:How to scale font size to fit the window if it's larger than the window in WPF XAML? 【发布时间】:2021-10-28 16:02:24 【问题描述】:

不确定这在 XAML 中是否很难做到,但我有一些 TextBlock,我使用固定字体大小在主窗口顶部显示。

如果这比主窗口大,它会调整主窗口的大小。我不想要这个。到目前为止我已经尝试过了,但无法阻止主窗口水平调整大小。

如果 TextBlock 不适合主窗口宽度,我想要调整它的大小。主窗口宽度是动态的,所以我不能使用固定的单位值。

代码如下:

<Viewbox StretchDirection="DownOnly">
    <Grid Name="InfoTextOverlay" Visibility="Hidden" HorizontalAlignment="Center">
        <TextBlock Text="Binding InfoText, ElementName=MyMainWindow" Foreground="White" FontSize="40" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Viewbox>

【问题讨论】:

这能回答你的问题吗? How to automatically scale font size for a group of controls? 有/没有Viewbox 你的代码不会为我调整主窗口的大小。将窗口的 SizeToContent 属性设置为 Manual ,如果不是。 @Maria,我需要主窗口来适应数据网格控件,所以它需要始终适应其内容,而不是顶部显示的文本块。 @Squirrel.98:谢谢,我今天去看看。 @Squirrel.98:我刚刚检查过,但它似乎覆盖复杂。不知道如何应用于我的案例,因为他有多个文本等。而我只想使用我选择的固定字体大小,除非它不适合我的窗口,然后调整大小以适应一些边距。 【参考方案1】:

如果您想避免自动宽度,请使用 TextWrapping="Wrap"。

如果您需要自动调整文本块的大小,只需删除 FontSize 属性

【讨论】:

以上是关于WPF 如何把子窗口放到主窗口的Panel中?的主要内容,如果未能解决你的问题,请参考以下文章

wpf窗口嵌套

如何关闭 WPF 中隐藏的主窗口?

WPF Grid Panel.ZIndex 设置为 1 在另一个窗口的情况下不起作用

vb2013 已获得主窗口句柄,怎么遍历所有子窗句柄到TreeView中?

如何在我的 wpf 主窗口中更改页面?

MFC中怎样获取指定窗口的句柄