読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

ListBoxの中身を逆順にする

割と小さめのネタですが。

WPFのリストボックスはなんでもできる、というのはよく知られている話ですが、んじゃ下から上に並ぶListBoxでどんくらいのコードで出来るのかな?というのを書いてみました。

残念ながら標準でListBoxの要素配置を行うItemsPanelはStackPanelでして、これはHorizontalかVerticalしかありません。んじゃこれでいいのか?というわけで使うのがDockPanelですね。これで、中身のListBoxItemsを下からDockさせればいいじゃん、と。

やってみましょう。

<ItemsPanelTemplate x:Key="ReverseItemsPanelTemplate">
	<DockPanel IsItemsHost="True" LastChildFill="False"/>
</ItemsPanelTemplate>
<Style x:Key="ReverseListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
	<Setter Property="DockPanel.Dock" Value="Bottom" />
</Style>

まずItemsPanelをDockPanelに変更し、その後ListBoxItemのDockPanel.Dockを変更しています。

これを使う側は例えばこんな感じで。

<ListBox Margin="10,10,0,0"
  ItemContainerStyle="{DynamicResource ReverseListBoxItemStyle}"
  ItemsPanel="{DynamicResource ReverseItemsPanelTemplate}">
    <Button Content="Button1"/>
    <Button Content="Button2"/>
    <Button Content="Button3"/>
    <Button Content="Button4"/>
    <Button Content="Button5"/>
    <Button Content="Button6"/>
    <Button Content="Button7"/>
    <Button Content="Button8"/>
    <Button Content="Button9"/>
    <Button Content="Button10"/>
</ListBox>

んじゃ、試してみましょう。

使用前。
f:id:posaunehm:20130222013809p:plain



使用後。
f:id:posaunehm:20130222013901p:plain


簡単ですね!