16

listView の項目間の間隔を変更したい (おそらく別の View 要素を使用する必要がありますか?) コードは次のようになります。

    <ListView SelectionMode="None" HorizontalContentAlignment="Left" >
        <ListView.Items>
            <TextBlock Text="Item 1" />
            <TextBlock Text="Item 2" />
            <TextBlock Text="Item 3" />
            <TextBlock Text="Item 4" />
        </ListView.Items>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" HorizontalChildrenAlignment="left"/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

通常のスタックパネル(要素をラップできる)をできるだけ模倣したい。現在、項目間のスペース (水平スペース) が大きすぎます。以前の質問 -> Windows 8 WrapPanel

前もって感謝します

4

5 に答える 5

30

デフォルトのテンプレートに変更を加える必要があります。パディングやマージンなどの単純な変更を行うだけの場合は、これを行うことができます:(コードをテストして動作するはずです)

            <ListView>
        <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapGrid Orientation="Horizontal" HorizontalChildrenAlignment="left"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="Padding" Value="0"/>
                    <Setter Property="Margin" Value="0"/>
                </Style>
            </ListView.ItemContainerStyle>
            <ListViewItem>
                <TextBlock Foreground="Wheat">hej</TextBlock>
            </ListViewItem>
            <ListViewItem>
                <TextBlock Foreground="Wheat">hej</TextBlock>
            </ListViewItem>
        </ListView>

より詳細に制御するには、デザイナでlistviewitemを選択して右クリックし、デフォルトのテンプレート全体のコピーを作成します。テンプレートの編集、コピーの編集を選択します。これによりデフォルトのテンプレートが生成され、そこで変更を加えることができます。listviewcontainerについても同じことができます。Blendを使用してこれを行うこともできます。

ここに説明と画像を追加しました(デフォルトのテンプレートを編集する方法)

それがどうなるか、そしてもっと質問があれば教えてください!幸運を!

編集:

MemeDeveloperは、まだ問題があり、他のいくつかのプロパティを調整することで解決したと以下に述べています。彼はコードを投稿してここに回答しました。必ず確認してください。

于 2012-07-22T00:43:34.310 に答える
20

私の知る限り(windows8.1 xamlストアアプリ)、これら2つをゼロに設定した後

<ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="Padding" Value="0"/>
                    <Setter Property="Margin" Value="0"/>

私はまだ取り除くことができないように見えるイライラするギャップを抱えていました.

ここで負のマージンを使用するとうまくいくかもしれませんが...ハックで作業が難しく、常に期待どおりの結果が得られるとは限りません

私の髪を引っ張った後、私は問題がこれらの人で解決されたことを発見しました。

ContentMargin="0" パディング="0"

次のようにListViewItemPresenterで:

        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Padding" Value="0" />
                <Setter Property="Margin" Value="0" />
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="VerticalContentAlignment" Value="Top" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <ListViewItemPresenter ContentMargin="0" Padding="0" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.ItemContainerStyle>

他の誰かがキーボードで頭を何度も叩くのを防ぐことを願っています ;)

于 2014-05-22T22:14:05.387 に答える
2

ListBox.ItemContainerTemplate プロパティを編集する必要があります。ブレンドまたは VS ビジュアル デザイナーは、変更のために抽出するのに役立ちます。

于 2012-07-21T20:28:27.077 に答える