如何根据动态网格的内容控制 WPF 应用程序窗口的高度

本文关键字:WPF 应用程序 窗口 高度 内容控制 动态 网格 何根 | 更新日期: 2023-09-27 18:33:42

我创建了一个 WPF 应用程序,用于在网格的第二行中生成磁贴。我试图实现的是将磁贴保留在第二行而不显示垂直滚动条,直到 WPF 应用程序的高度超过用户屏幕的分辨率。

<Window x:Class="ABC.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ABC Installation" MinWidth="620" SizeToContent="WidthAndHeight" AllowsTransparency="True" WindowStyle="None" Loaded="MainWindow_loaded" MinHeight="600" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="56" />
            <RowDefinition Height="Auto" ScrollViewer.IsDeferredScrollingEnabled="True" />            
            <RowDefinition Height="94"/>
        </Grid.RowDefinitions>
</Grid>
    <ScrollViewer Name="productsOuterScroll" Grid.Row="2" HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.RowSpan="1" >
        <StackPanel x:Name="FormStackPanel">
        </StackPanel>
    </ScrollViewer>

此代码呈现所有超过用户屏幕窗口高度的磁贴,而不使用垂直滚动条。

知道怎么做吗?任何帮助将不胜感激。

如何根据动态网格的内容控制 WPF 应用程序窗口的高度

如果要滚动内容,请从要向其添加内容的行的RowDefinition中删除Height,然后将内容放入 ScrollViewer 中。

您的窗口可能根据屏幕的垂直分辨率正确调整大小,但如果它显示在屏幕中心,它将超过高度。您可以使用以下命令将启动位置设置为屏幕顶部:

WindowStartupLocation="Manual" Top="0"
如果窗口高度

过高,您可能需要设置窗口的最大高度。

我想出了这个错误。只需要做两件事。

  1. 从行定义中删除 height 属性,使其应如下所示

    <Window x:Class="ABC.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ABC Installation" MinWidth="620" SizeToContent="WidthAndHeight" AllowsTransparency="True" WindowStyle="None" Loaded="MainWindow_loaded" MinHeight="600" >
    
    <Grid>  
        <Grid.RowDefinitions>
           <RowDefinition Height="60" />
           <RowDefinition Height="56" />
           <RowDefinition  ScrollViewer.IsDeferredScrollingEnabled="True" />
           <RowDefinition Height="94"/>
        </Grid.RowDefinitions>
       <ScrollViewer Name="productsOuterScroll" Grid.Row="2" HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.RowSpan="1" >
          <StackPanel x:Name="FormStackPanel">
          </StackPanel>
       </ScrollViewer>
    </Grid>
    
  2. 根据用户在文件中的主屏幕高度动态设置最大高度.cs

       double userheightscreen = System.Windows.SystemParameters.PrimaryScreenHeight;
       this.MaxHeight = userheightscreen - 100;
    

PS:"-100"只是为了在屏幕的顶部和底部留出一些空间。