Wpf 在不丢失元素的情况下将窗口大小调整为更小的屏幕

Wpf 在不丢失元素的情况下将窗口大小调整为更小的屏幕,wpf,window,frame,scrollviewer,Wpf,Window,Frame,Scrollviewer,如您所见,(如果图像加载正确),当我从笔记本电脑上运行程序时,我无法看到整个屏幕,也无法滚动查看帧中包含的其余元素。我试图添加一个scrollviewer来包含框架,但是滚动条没有任何作用,画布的元素被重新定位或消失。我是否包含正确的代码以使窗口适合屏幕大小?我应该使用scrollviewer来查看整个窗口还是至少查看框架页面中的元素 Height="{x:Static SystemParameters.PrimaryScreenHeight}" Width="{x:Stati

如您所见,(如果图像加载正确),当我从笔记本电脑上运行程序时,我无法看到整个屏幕,也无法滚动查看帧中包含的其余元素。我试图添加一个scrollviewer来包含框架,但是滚动条没有任何作用,画布的元素被重新定位或消失。我是否包含正确的代码以使窗口适合屏幕大小?我应该使用scrollviewer来查看整个窗口还是至少查看框架页面中的元素

    Height="{x:Static SystemParameters.PrimaryScreenHeight}" 
    Width="{x:Static SystemParameters.PrimaryScreenWidth}" 
    Loaded="Window_Load" WindowState="Maximized">

在窗口中使用
ScrollViewer
,如下所示:

 <ScrollViewer MaxHeight="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}},Path=ActualHeight,Mode=OneWay}">
    <canvas>
............
</ScrollViewer>

............
示例输出:(如果
Scrollviewer
MaxWidth
也存在
width
问题,请绑定该文件)


在窗口中使用
ScrollViewer
,如下所示:

 <ScrollViewer MaxHeight="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}},Path=ActualHeight,Mode=OneWay}">
    <canvas>
............
</ScrollViewer>

............
示例输出:(如果
Scrollviewer
MaxWidth
也存在
width
问题,请绑定该文件)

在不丢失元素的情况下将窗口大小调整为更小的屏幕

我想我可以说,我们强烈建议您离开
画布
来执行布局<代码>画布可以像您在评论中提到的那样轻松倾斜,因为它非常接近创建基于表单的简单windows应用程序的方式

WPF布局面板是专为您的要求而设计的

一种可能的结构是这样的

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Text="Location"/>
        <TextBlock Grid.Row="1" Grid.Column="0" Text="Product Line"/>
        <TextBlock Grid.Row="2" Grid.Column="0" Text="Search"/>
        <ScrollViewer Grid.Row="0" Grid.Column="1" Grid.RowSpan="3">
            <StackPanel>
               ...
            </StackPanel>
        </ScrollViewer>
    </Grid>

...
在不丢失元素的情况下将窗口大小调整为更小的屏幕

我想我可以说,我们强烈建议您离开
画布
来执行布局<代码>画布可以像您在评论中提到的那样轻松倾斜,因为它非常接近创建基于表单的简单windows应用程序的方式

WPF布局面板是专为您的要求而设计的

一种可能的结构是这样的

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Text="Location"/>
        <TextBlock Grid.Row="1" Grid.Column="0" Text="Product Line"/>
        <TextBlock Grid.Row="2" Grid.Column="0" Text="Search"/>
        <ScrollViewer Grid.Row="0" Grid.Column="1" Grid.RowSpan="3">
            <StackPanel>
               ...
            </StackPanel>
        </ScrollViewer>
    </Grid>

...

您的控件位于什么类型的面板中?设置了什么样的属性?这决定了WPF如何决定控件的布局和大小。ScrollViewer只有在设置了高度/宽度的情况下才能工作,否则根据其父面板的不同,它们可能会增长到允许内容所需的大小。我正在使用canvas作为容器。页面包含一个画布,其中包含列表框、文本框和RichTextBox。这就是您的问题<代码>画布要求您指定每个子元素的位置,而它根本不缩放它。您可以在ScrollViewer中包装画布,但必须设置ScrollViewer和画布的高度/宽度。更好的解决方案是使用不同的布局控件来显示项目,以实现更动态的显示。如果你对WPF的布局控件不熟悉,我推荐这篇文章:我想我使用画布是因为它很简单,而且我很懒。那么,在窗口下,我应该使用网格,网格应该包装在ScrollViewer中?还是只是镜框?谢谢是否希望应用程序根据窗口大小动态调整大小?它通常看起来更好一点,你可以给它一个MinSize来强制最小尺寸。ScrollViewer应该包装包含所有控件的面板,并且您需要确保ScrollViewer的高度/宽度与屏幕大小无关。您可以将其绑定,也可以将其放置在DockPanel.Dock=Fill的DockPanel中,因为DockPanel会调整其子对象的大小以适应可用的大小。包装控件的任何面板都需要能够扩展以填充所需的任何空间,例如StackPanel、Grid等。控件位于哪种面板中?设置了什么样的属性?这决定了WPF如何决定控件的布局和大小。ScrollViewer只有在设置了高度/宽度的情况下才能工作,否则根据其父面板的不同,它们可能会增长到允许内容所需的大小。我正在使用canvas作为容器。页面包含一个画布,其中包含列表框、文本框和RichTextBox。这就是您的问题<代码>画布要求您指定每个子元素的位置,而它根本不缩放它。您可以在ScrollViewer中包装画布,但必须设置ScrollViewer和画布的高度/宽度。更好的解决方案是使用不同的布局控件来显示项目,以实现更动态的显示。如果你对WPF的布局控件不熟悉,我推荐这篇文章:我想我使用画布是因为它很简单,而且我很懒。那么,在窗口下,我应该使用网格,网格应该包装在ScrollViewer中?还是只是镜框?谢谢是否希望应用程序根据窗口大小动态调整大小?它通常看起来更好一点,你可以给它一个MinSize来强制最小尺寸。ScrollViewer应该包装包含所有控件的面板,并且您需要确保ScrollViewer的高度/宽度与屏幕大小无关。您可以将其绑定,也可以将其放置在DockPanel.Dock=Fill的DockPanel中,因为DockPanel会调整其子对象的大小以适应可用的大小。包装控件的任何面板都需要能够增长以填充所需的任何空间,例如StackPanel、Grid等