0

私は Qt とその Qt Designer に慣れています。

レイアウト コントロール 'grid' と 'StackPanel' を備えた XAML はどこか似ていますが、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>

次の画像は、要素が左側に押し出されていることを示していますが、上下に重ねられた 2 つのパネルは上部に押し出されていません。両方をVerticalAlignment="Top"オーバーラップして設定すると、これも間違っています。 ここに画像の説明を入力

ウィンドウのサイズを変更すると、要素のサイズが変更されず、2 番目の要素がStackPanel最初の要素と重なっていることがわかります。

ここに画像の説明を入力

代わりに、要素のサイズを最小幅に変更し、それ以上のウィンドウのサイズ変更を禁止する必要があります。

4

1 に答える 1

3

VerticalAlignment両方を に設定した場合に 2 つのスタック パネルが重なる最初の問題は、どちらにあるべきかをTop指定していないため、デフォルトで両方が になるためです。行インデックスを指定すると、重複しません:Grid.RowGrid.Row = 0

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

ボタンの最小サイズに達したときにウィンドウのサイズ変更を停止する方法はありません。の を設定してMinWidthGridウィンドウをそこで停止するように依頼できます。

<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 に答える