4

Windows8ストア用のXAML/C#アプリ内で、各ListItemが水平グリッドであるListViewを作成しようとしているため、以下のXAMLを使用しています。

  <ListView Name="ResultsView">
    <ListView.ItemTemplate>
      <DataTemplate>
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="4*" />
            <ColumnDefinition Width="4*" />
          </Grid.ColumnDefinitions>
          <TextBlock Text="{Binding BestRank}" Grid.Column="0"/>
          <TextBlock Text="{Binding PlayerName}" Grid.Column="1"/>
          <TextBlock Text="{Binding BestScore}" Grid.Column="2"/>
        </Grid>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>

このプログラムを実行すると、リストビューには、バインドされているリストのすべてのアイテムが含まれています(コードビハインドを介して)。ただし、すべてのリストアイテムで、3つの列すべての内容がスペースなしで一緒に表示されます。リストビューの外側に同様のグリッドを作成すると、きれいに表示され、画面の幅全体を占め、上記のXAMLで指定されているように3つの列に分割されます。

私は何が間違っているのですか?

4

4 に答える 4

12

問題はのItemContainerStyle必要性だHorizontalContentAlignmentと思いますStretch。これをListViewに追加してみてください。

<ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListView.ItemContainerStyle>
于 2013-01-07T03:30:00.467 に答える
0

ListBoxとグリッドの両方にHorizo​​ntalContentAlignment="Stretch"が必要です

グリッドの幅を指定するか、スタイルをリソースとしてグリッドに追加します。行の直後にこれを追加します</Grid.ColumnDefinitions>

 <Grid.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="TextAlignment" Value="Right" />
                <Setter Property="Margin" Value="4" />
                <Setter Property="VerticalAlignment" Value="Center" />
            </Style>
 </Grid.Resources>

これにより、プロパティがグリッド内のすべてのTextBlockに設定されます。Marginプロパティのみが必要な場合があります。幅とパディングのプロパティも考慮してください。任意のTextBlockのプロパティを、Styleのデフォルトではないものに設定することで、このデフォルトをオーバーライドできます。

于 2013-01-07T02:15:06.143 に答える
0

デフォルトのItemsPanelTemplateは、私が覚えている限り、スタックパネルです。つまり、子にストレッチ動作を自動的に与えることはありません。あなたはそれを変更する必要があるでしょう、私は私のラップトップが起動するのを待っている私の携帯電話ですぐに編集します:)

編集:

私が考えていたことを無視することはできませんItemsControl。JBrooksは正しいです。デフォルトがにHorizontalContentAlignment設定されていることを確認してください。StretchLeft

<ListView Name="ResultsView" HorizontalContentAlignment="Stretch">

それはうまくいくはずです-使用するコントロールはXXXXContentAlignmentデフォルトであるように見えますが、他のコントロール(など)Leftとは少し一貫性がないと思いますGrid

于 2013-01-07T02:29:20.397 に答える
0

実際、これはListviewの問題ではありません。問題はあなたがそれをどこに入れているのですか?リストビューをグリッドに配置します。動作するはずです

<ListView Name="ResultsView" 
              HorizontalContentAlignment="Stretch">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="Yellow">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="1*" />
                        <ColumnDefinition Width="4*" />
                        <ColumnDefinition Width="4*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding BestRank}" Grid.Column="0"/>
                    <TextBlock Text="{Binding PlayerName}" Grid.Column="1"/>
                    <TextBlock Text="{Binding BestScore}" Grid.Column="2"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
于 2013-01-07T02:41:39.083 に答える