WPFのリストボックスとスタックパネルのコントロールに関するすべてを読んだ後、この動作の原因は何となく分かりません。私はリストボックスの上のアイテムを積み重ねて、大量のスペースを必要としないようにしたいと思いますが、私が何をしても、それぞれの間に大きなギャップがあるようです。 VerticalContentAlignment = "Top"プロパティをリストボックスに含めて、スタックパネルの縦方向のアライメントを設定して、デフォルトのストレッチを持たないようにしました。ここでは、コードは次のようになります。WPFがリストボックスの垂直方向の配置が正しく動作しない
<Grid>
<ListBox x:Name="listView" HorizontalAlignment="Stretch" SelectionMode="Multiple" IsHitTestVisible="True" VerticalContentAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Margin="0,0,0,10" VerticalAlignment="Top" Background="Black">
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected}" BorderBrush="#FF242424" VerticalAlignment="Center">
<CheckBox.LayoutTransform>
<ScaleTransform ScaleX="4" ScaleY="4" />
</CheckBox.LayoutTransform>
</CheckBox>
<Image Source="{Binding Image}" HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="None" />
<StackPanel Orientation="Vertical" VerticalAlignment="Top">
<TextBlock Text="{Binding Test1}" FontSize="22" Margin="5,0,0,3" FontWeight="UltraLight"></TextBlock>
<TextBlock Text="{Binding Test2}" FontSize="11" Foreground="#FF585656" Margin="5,0,0,3" FontWeight="UltraLight"/>
<TextBlock Text="{Binding Test3}" FontSize="11" Foreground="#FF585656" Margin="5,0,0,0" FontWeight="UltraLight"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
そして、ここではその結果です:
私はそれが利用可能にストレッチされていないことを確認するために、トラブルシューティングの目的のためにスタックパネル項目に黒い背景を追加しました高さ。
私が何をしても、最初のリスト項目は正しく配置されているように見えますが、すべての連続する項目間に大きなギャップがあります。何か案は?
UniformGridは、空間を子供の間で均等に分割します。 'ItemContainerStyle'に' Background'セッターを追加すると、ListBoxItemsがすべての空白を占めていることがわかります。 'VerticalContentAlignment'が' Stretch'の場合、項目の内容はListBoxItemsを埋めるように伸びます。実際には、StackPanel VerticalAlignmentも伸ばしなければならないと思います。項目を上から塗りつぶす場合は、ItemPanelTemplateに垂直方向のStackPanelを使用します。これがデフォルトですので、 'ItemPanelTemplate'を削除することができます。 –
@Ed Plunkett Ugh ...だから簡単です...単にItemPanelTemplateを削除するだけでした。私は十分にあなたに感謝することはできません。 –