5

いくつかの見出しがあるWPFリストボックスがあります。これは、各ヘッダーがどのように表示されるかを定義するGroupStyleを使用することで実現しました。

<ListBox DataContext="{StaticResource MyGroups}" ItemsSource="{Binding}">
    <ListBox.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <!-- my header stuff -->
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListBox.GroupStyle>

    <!-- ListBox.ItemTemplate.. not shown -->
</ListBox>

どういうわけか、これにより、個々のListBoxItemがそれぞれのヘッダーの下でわずかに「インデント」されます(ただし、GroupStyleを削除すると、すべてのヘッダーとともにインデントが削除されます)。

なぜデフォルトでインデントしたいのかわかりますが、とにかくその小さな左のパディングを削除することはできますか?ListBoxItemのスタイルを定義してPadding=0を設定しようとしましたが、結果は同じです。

4

5 に答える 5

5

インデントを削除する唯一の方法は、GroupStyle.ContainerStyleにGroupItem用の独自のコントロールテンプレートを導入することでした。

テンプレートは、ヘッダー用とグループアイテム用の2つのグリッド行で構成されています。

<ListBox.GroupStyle>
    <GroupStyle>
        <GroupStyle.ContainerStyle>
            <Style TargetType="GroupItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="GroupItem">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                </Grid.RowDefinitions>

                                <TextBlock Grid.Row="0" Text="{Binding MyHeaderText}"/>
                                <ItemsPresenter Grid.Row="1"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>
</ListBox.GroupStyle>
于 2012-10-13T03:18:52.450 に答える
1

-20 の左マージンを入れてから、リストボックス項目の (+)20 を入れます。それらのいずれかが結果に影響しますか?

その場合は、必要に応じて適切なサイズに調整してください。

于 2012-10-10T18:00:04.723 に答える
1

kentoさん、ご回答ありがとうございます!グループヘッダーにカスタムテンプレートを表示する必要がある場合は、それを追加したいだけで、次のようなものを使用することができます:

<ControlTemplate TargetType="GroupItem">
    <StackPanel>
        <ContentPresenter 
            Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}"
        />
        <ItemsPresenter />
    </StackPanel>
</ControlTemplate>
于 2015-02-17T16:02:15.923 に答える