0

我习惯了 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与第一个重叠:

在此处输入图像描述

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

4

1 回答 1

3

当您将两者都设置为时,两个堆栈面板重叠的第一个问题VerticalAlignmentTop因为由于您没有指定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>

当达到按钮的最小大小时,窗口不会停止调整大小。您可以设置MinWidthofGrid并要求窗口停在那里:

<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>

或设置自身MinWidthWindow:)

于 2013-02-17T18:33:37.523 回答