5

この回答のとおり、ItemsPanelがWrapPanelであるListBoxを実装していますが、ひねりがあります。私のItemsSourceはグループ化されたCollectionViewです。リストボックスにGroupStyle適用すると、その質問に示されているラッピングは機能しません。グループは常に垂直に表示されます。

私のアプリをスヌーピングしている理由は次のとおりです

GroupItemにWrapPanelを表示するスヌープ

ご覧のとおり、ListBoxのItemsPanelTemplateとして定義されているWrapPanelは、各GroupItem内のItemsPresenterに表示されます。GroupItem自体を含むために、暗黙の垂直方向のStackPanel(ピンク色のボックスの一番上のアイテム)が作成されます。

この動作をオーバーライドして、GroupItemsをWrapPanelに配置する方法はありますか?ListBox全体を再テンプレート化する必要がありますか?

更新: ListBoxとCollectionViewグループ化で実際に行っていることを説明するために、少しXAMLを投稿しましょう。

<Grid>
    <ListBox ItemsSource="{Binding}"                 
             ScrollViewer.VerticalScrollBarVisibility="Disabled"
             SelectionMode="Multiple"
             ItemContainerStyle="{StaticResource itemStyle}">
        <ListBox.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" FontWeight="Bold"/>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListBox.GroupStyle>
        <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type WpfApplication1:Item}">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Name}" FontSize="10"/>
                    <TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" FontSize="10"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
</Grid>

これGroupStyleはその中心です。これを削除すると、GroupItemsはレンダリングされず、スクリーンショットの(StackPanel)98の代わりにWrapPanel(上のスクリーンショットのGroupItemの下に表示されます)が表示されます。

4

2 に答える 2

11

この動作は、GroupStyleでHeaderTemplateを定義した場合にのみ発生するようです。

これは、GroupStyle.PanelプロパティをWrapPanelを含むように設定することで修正できます。

<ListBox.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" FontWeight="Bold"/>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
        <GroupStyle.Panel>
            <ItemsPanelTemplate>
                <WrapPanel></WrapPanel>
            </ItemsPanelTemplate>
        </GroupStyle.Panel>
    </GroupStyle>
</ListBox.GroupStyle>

次のようになります。
ここに画像の説明を入力してください

于 2011-04-02T06:22:42.010 に答える
0

項目コントロール (ListBox) からグループ スタイルを置き換えることができるはずです。

<ListBox.GroupStyle>
    <Style />
<ListBox.GroupStyle/>

または、グループ アイテム オブジェクトに基づいて DataTemplate を作成することもできます。

<DataTemplate DataType="{x:Type GroupItem}">
    <Panel />
</DataTemplate>
于 2011-03-31T18:39:12.260 に答える