xaml - 在 UWP 中制作固定宽度的网格列和行

标签 xaml uwp grid-layout

我正在制作一个应用程序,我希望修复某些网格行和列,而其他网格行和列则调整大小以适合窗口。我的问题是我无法在通用应用程序中执行此操作。

在 WPF 中,解决方案很简单:

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <Grid.RowDefinitions>
        <RowDefinition Height="50" /> <!-- This row is a fixed height -->
        <RowDefinition Height="*" MinHeight="200" /> <!-- This row is resizeable, but has a minimum height -->
        <RowDefinition Height="100" />
        <RowDefinition Height="20" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="20" /> <!-- This column has a fixed width -->
        <ColumnDefinition Width="*" MinWidth="300" /> <!-- These rows are resizeable, but have minimum widths -->
        <ColumnDefinition Width="*" MinWidth="300" />
        <ColumnDefinition Width="20" />
    </Grid.ColumnDefinitions>
</Grid>

当我在 UWP 中尝试此操作时,具有固定大小的行和列会调整大小,而其他带有星号的行和列保持固定。我尝试在固定的行和列上添加星号并删除预先存在的星号。我认为在 UWP 中它是相反的,但这严重搞乱了我的应用程序并使情况变得更糟。

我的解决方案是在 UWP 中尝试以下操作:

<Grid x:Name="pageGrid"
      Background="White">
    <Grid.RowDefinitions>
        <RowDefinition MaxHeight="20"
                       MinHeight="20"/>
        <RowDefinition Height="*"/>
        <RowDefinition MaxHeight="20"
                       MinHeight="20"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MaxWidth="20"
                          MinWidth="20"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition MaxWidth="260"
                          MinWidth="260"/>
        <ColumnDefinition MaxWidth="20"
                          MinWidth="20"/>
    </Grid.ColumnDefinitions>
</Grid>

这里的想法是在控件周围有固定的边距,宽度为 20 像素。这些边距内有两个框:一个具有固定的宽度和可调整的高度,另一个可在两个方向上调整大小。

尽管如此,我再次遇到了同样的问题,即边距调整大小,但“可调整大小”框却没有调整。

实际上是否有一种方法可以使用通用 Windows 平台在网格中拥有固定且可调整大小的行和列?到目前为止,我还没有找到这方面的证据。

完整代码:

<Page
    x:Class="UniversalCamera.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UniversalCamera"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
          MinWidth="800"
          MinHeight="450"
          Width="800"
          Height="450">
        <Grid x:Name="pageGrid"
              Background="White">
            <Grid.RowDefinitions>
                <RowDefinition MaxHeight="20"
                               MinHeight="20"/>
                <RowDefinition Height="*"/>
                <RowDefinition MaxHeight="20"
                               MinHeight="20"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition MaxWidth="20"
                                  MinWidth="20"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition MaxWidth="260"
                                  MinWidth="260"/>
                <ColumnDefinition MaxWidth="20"
                                  MinWidth="20"/>
            </Grid.ColumnDefinitions>
            <Border BorderThickness="2"
                    BorderBrush="Black"
                    CornerRadius="5"
                    Grid.Column="1"
                    Grid.Row="1"
                    Grid.ColumnSpan="2"
                    Margin="-10,-10,-10,-10"/>
            <Border BorderThickness="2"
                    BorderBrush="Black"
                    CornerRadius="5"
                    Grid.Column="1"
                    Grid.Row="1"
                    Margin="2,2,2,2">
                <Image x:Name="imageFrame"
                   HorizontalAlignment="Stretch"
                   VerticalAlignment="Stretch"/>
            </Border>
            <Canvas x:Name="controlCanvas"
                    HorizontalAlignment="Stretch"
                    VerticalAlignment="Stretch"
                    Grid.Column="2"
                    Grid.Row="1">
                <StackPanel x:Name="controlStack"
                            Canvas.Top="0"
                            Canvas.Left="0"
                            Width="260"
                            Orientation="Vertical">
                    <Button x:Name="startLiveButton"
                            Width="200"
                            Margin="0,5,0,0"
                            HorizontalAlignment="Center"
                            Content="Start Live"
                            Click="startLiveButton_Click"/>
                    <Button x:Name="stopLiveButton"
                            Width="200"
                            Margin="0,5,0,0"
                            HorizontalAlignment="Center"
                            Content="Stop Live"
                            Click="stopLiveButton_Click"/>
                    <Button x:Name="freezeVideoButton"
                            Width="200"
                            Margin="0,5,0,0"
                            HorizontalAlignment="Center"
                            Content="Freeze Video"
                            Click="freezeVideoButton_Click"/>
                    <Button x:Name="loadParameterButton"
                            Width="200"
                            Margin="0,5,0,0"
                            HorizontalAlignment="Center"
                            Content="Load Parameter"
                            Click="loadParameterButton_Click"/>
                    <CheckBox x:Name="autoWhiteCheckbox"
                              HorizontalAlignment="Center"
                              Width="200"
                              Margin="0,25,0,0"
                              Content="Auto White Balance"
                              Checked="autoWhiteCheckbox_Checked"
                              Unchecked="autoWhiteCheckbox_Unchecked"/>
                    <CheckBox x:Name="autoGainCheckbox"
                              HorizontalAlignment="Center"
                              Width="200"
                              Margin="0,5,0,0"
                              Content="Auto Gain Balance"
                              Checked="autoGainCheckbox_Checked"
                              Unchecked="autoGainCheckbox_Unchecked"/>
                </StackPanel>
            </Canvas>
        </Grid>
    </Grid>
</Page>

此代码旨在有额外的行和列作为主控件周围的边距。这些应固定为 20 像素。当我运行代码时,边距会拉伸(stretch),而中心框保持固定;这与我的意图相反:

enter image description here enter image description here (当调整窗口大小时,黑色轮廓区域保持相同大小,同时边距拉伸(stretch)以适合窗口。)

最佳答案

您的主网格固定为 800 x 450 像素。如果删除该限制,网格将适当拉伸(stretch)

Stretched UI

更新的代码:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
      MinWidth="800"
      MinHeight="450">
    <Grid x:Name="pageGrid"
...

关于xaml - 在 UWP 中制作固定宽度的网格列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077358/

相关文章:

wpf - ControlTemplate TargetType 与模板化类型不匹配

xaml - PhoneTextBox 中的换行提示

c# - WPF ListBox 自定义控件问题

c++ - 如何为 UWP C++/WinRT 应用程序创建 "suitable await_ready function"?

error-handling - 为什么建议在UWP应用崩溃时不显示错误详细信息?

java - jButtons 未正确添加

c# - 将 Xaml 路径转换为 ​​C# 代码

c# - 后台任务在调试期间在生命周期事件中可见但不会自动运行

android - GridLayout 在整个屏幕上没有均匀地间隔 child

Css 网格和汉堡包菜单