我习惯了Qt及其Qt Designer。
XAML及其布局控件'grid'和'StackPanel'在某种程度上相似,但我仍然错过或没有找到Qt中设计的一些最常见的属性。由于我是XAML的新手,我想知道答案或进一步提供的文件。
例如,我想添加2个元素(比如按钮)水平或垂直的默认高度和最小高度和最小宽度。如果水平对齐,则应将其推向左侧,而右侧的剩余侧应为自由。这意味着如果窗口大小增加,按钮的大小不会增加。在Qt中,这是通过网格与间隔符结合实现的(例如,参见this tutorial)。
我的第一个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
与第一个重叠:
相反,元素应调整到最小宽度,并且应禁止进一步调整窗口大小。
答案 0 :(得分:3)
将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>
当达到按钮的最小尺寸时,窗口无法停止调整大小。您可以设置MinWidth
的{{1}}并让窗口停在那里:
Grid
或者设置<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>
本身的MinWidth
: