Qt编程人员的xaml布局介绍

我习惯Qt和Qt Designer。

XAML的布局控件'grid'和'StackPanel'在某种程度上是相似的,但我仍然错过或没有发现Qt中一些最常见的设计属性。 由于我对XAML完全陌生,因此我想知道答案或更多可用的文档。

例如,我想要添加2个元素(让说按钮)水平或垂直与他们的默认高度和最小高度和最小宽度。 如果水平对齐,则应将其推向左侧,而右侧的剩余侧应自由。 这意味着如果窗口大小增加,按钮的大小不会增加。 在Qt中,这是通过一个网格结合一个间隔器来实现的(例如,请参阅本教程中的示例)。

我的第一个XAML远离我的期望。 RowDefinition的定义是从教程中复制的。 但我不明白它的意思...

<Window x:Class="SpectrumViewer.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Spectrum Viewer" Height="350" Width="525">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="*" />
      <RowDefinition Height="Auto" />      
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Margin="8" VerticalAlignment="Top">
      <Button MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="100" Name="buttonTest">test</Button>
      <TextBox MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="150" Name="textBoxValue"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" Margin="8" >
      <Button MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="100" Name="button1">button 1</Button>
      <Button MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="100" Name="button2">button 2</Button>
    </StackPanel>
  </Grid>
</Window>

接下来的图片显示元素被推到左侧,但是两个叠在一起的面板不会被推到顶部。 如果我将它们设置为VerticalAlignment="Top"它们重叠,这也是错误的。

如果我调整窗口的大小,可以看到元素没有调整大小,第二个StackPanel与第一个StackPanel重叠:

在这里输入图像描述

相反,元素应该调整到最小宽度,并且应该禁止进一步调整窗口大小。


当您将VerticalAlignment设置为Top时,两个堆叠面板的第一个问题是重叠的,因为您没有指定它们应该在哪个Grid.Row中,所以默认情况下都是在Grid.Row = 0 。 指定行索引,它们不会重叠:

<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="8" VerticalAlignment="Top">
  ....
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="8" VerticalAlignment="Top">
  ....
</StackPanel>

当达到按钮的最小尺寸时,窗口无法停止调整大小。 您可以设置GridMinWidth并要求窗口在此处停止:

<Window x:Class="SpectrumViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Spectrum Viewer" Height="350" Width="525" 
MinWidth="{Binding RelativeSource={RelativeSource Self}, Path=Content.MinWidth}">
  <Grid MinWidth="350">
   .......
  </Grid>
</Window>

或者设置Window本身的MinWidth :)

链接地址: http://www.djcxy.com/p/49963.html

上一篇: xaml layout introduction for Qt programmer

下一篇: Correctly resizing rows on view