WPF 窗口扩展到全屏

Posted

技术标签:

【中文标题】WPF 窗口扩展到全屏【英文标题】:WPF window expands to full screen 【发布时间】:2022-01-19 11:15:43 【问题描述】:

我有这段代码,我想在上面显示我的布局问题。

<Window x:Class="DataGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen"
        ResizeMode="CanResize" SizeToContent="WidthAndHeight"
        Title="Example" MinHeight="250" MinWidth="250">
   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition Height="Auto" />
         <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="Auto" />
         <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>

      <Rectangle Grid.Row="0" Grid.Column="0" Fill="Beige" Width="400" Height="250" Margin="4" />
      <Rectangle Grid.Row="0" Grid.Column="1" Fill="Green" Width="400" Height="250" Margin="4" />
      <ScrollViewer Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
         <Rectangle Fill="LightCoral" Width="4000" Height="100" />
      </ScrollViewer>
   </Grid>
</Window>

矩形表示数据网格或图形等对象。前两个矩形很小,但第三个矩形可能很长,因此位于 scrollviewer 内。问题是这个长矩形会在滚动条出现之前将对话框扩展到全屏。

我想仅根据两个小矩形(网格的第一行)设置对话框的宽度,并将滚动查看器应用于长矩形。但是,我需要保留SizeToContent = "WidthAndHeight",因为小矩形可以有不同的大小。

关于如何编辑布局的任何想法?

【问题讨论】:

在视图后面的代码中计算大小并在启动时设置它。之后窗口仍然可以调整大小或为此使用自定义转换器 【参考方案1】:

您可以通过将两个小矩形移动到 Grid 中并将 ScrollViewer 的 Width 属性与该 Grid 的 ActualWidth 属性绑定来完成此操作。

<Window x:Class="WpfApp11.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen"
        ResizeMode="CanResize" SizeToContent="WidthAndHeight"
        Title="Example" MinHeight="250" MinWidth="250">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Grid Grid.Row="0" x:Name="UpperRow">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Rectangle Grid.Column="0" Fill="Beige" Width="400" Height="250" Margin="4" />
            <Rectangle Grid.Column="1" Fill="Green" Width="400" Height="250" Margin="4" />
        </Grid>

        <ScrollViewer Grid.Row="1" Width="Binding ElementName=UpperRow, Path=ActualWidth"
                      HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <Rectangle Fill="LightCoral" Width="4000" Height="100" />
        </ScrollViewer>
    </Grid>
</Window>

【讨论】:

以上是关于WPF 窗口扩展到全屏的主要内容,如果未能解决你的问题,请参考以下文章

从其 superView 中删除 UIView 并将其框架扩展到全屏

如何使用 SwiftUI 将详细视图扩展到全屏?

如何将collectionview单元格扩展到全屏[关闭]

在 UICollectionView 中选择时将单元格扩展到全屏

Material Design - 将卡片扩展(过渡)到全屏

如何将 NavigationView 从具有固定尺寸的 TabView 扩展到全屏?