【问题标题】:Arranging ListView items Horizontally水平排列 ListView 项目
【发布时间】:2012-05-30 16:46:39
【问题描述】:

我正在使用按数据源的属性(资源)之一分组的 ListView。我的要求是显示每个组与其他组水平对齐,但我的实现(如下)显示组垂直对齐

            <ListView x:Name="listViewResourceHours" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0" SelectionMode="Single" Height="100" Width="300" >
            <ListView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                <ControlTemplate TargetType="GroupItem">
                                    <StackPanel Orientation="Horizontal">
                                        <ContentPresenter/>
                                        <ItemsPresenter/>
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </ListView.GroupStyle>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel> 
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                        <Label VerticalAlignment="Center"  Margin="0" Content="{Binding Hours}" />
                        <Label VerticalAlignment="Center"  Margin="2,0,0,0" Content="{Binding WorkingHoursType, Converter={StaticResource ResourceKey=hoursTypeConverter}}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

以下是此代码结果的示例:

PSE: 0 (B) 0 (NB)
PSC: 0 (B) 0 (NB)
PM: 0 (B) 0 (NB)
EIA: 0 (B) 0 (NB)

这是我真正希望它看起来像的示例

PSE: 0 (B) 0 (NB)  PSC: 0 (B) 0 (NB)  PM: 0 (B) 0 (NB)  EIA: 0 (B) 0 (NB)

任何帮助表示赞赏。

【问题讨论】:

  • 其他人可能会发现this link 也很有帮助。

标签: wpf listview


【解决方案1】:

在这种情况下,您应该为 Group 定义面板,如下所示:

<GroupStyle.Panel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal" />
    </ItemsPanelTemplate>
</GroupStyle.Panel>

在 mod 之后你的 xaml 看起来像:

<ListView x:Name="listViewResourceHours" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0" SelectionMode="Single" Height="100" Width="300" >
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="GroupItem">
                                <StackPanel Orientation="Horizontal">
                                    <ContentPresenter/>
                                    <ItemsPresenter/>
                                </StackPanel>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                <Label VerticalAlignment="Center"  Margin="0" Content="{Binding Hours}" />
                <Label VerticalAlignment="Center"  Margin="2,0,0,0" Content="{Binding WorkingHoursType}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

【讨论】:

    【解决方案2】:

    正确的做法是:

    <ListView Grid.Row="4" Name="btView"> 
        <ListView.ItemsPanel> 
            <ItemsPanelTemplate> 
                <StackPanel Orientation="Horizontal"></StackPanel> 
            </ItemsPanelTemplate> 
        </ListView.ItemsPanel> 
        <ListView.ItemTemplate> 
            <DataTemplate> 
                <StackPanel Orientation="Horizontal"> 
                    <RadioButton Name="Octave1" Content="Octave 1"/> 
                    <RadioButton Name="Octave2" Content="Octave 2"/> 
                    <RadioButton Name="Octave3" Content="Octave 3"/> 
                    <RadioButton Name="Octave4" Content="Octave 4"/> 
                </StackPanel> 
            </DataTemplate> 
        </ListView.ItemTemplate> 
    
        <ListItem/> 
    </ListView> 
    

    【讨论】:

      【解决方案3】:

      这是跟随 gaurawerma 之后的最终代码

      <ListView x:Name="listViewResourceHours" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0" SelectionMode="Single" Height="100" Width="500" >
              <ListView.GroupStyle>
                  <GroupStyle>
                      <GroupStyle.Panel>
                          <ItemsPanelTemplate>
                              <StackPanel Orientation="Horizontal" />
                          </ItemsPanelTemplate>
                      </GroupStyle.Panel>
                      <GroupStyle.HeaderTemplate>
                          <DataTemplate>
                              <TextBlock FontWeight="Bold" Text="{Binding Name, StringFormat={}{0}:}" />
                          </DataTemplate>
                      </GroupStyle.HeaderTemplate>
                      <GroupStyle.ContainerStyle>
                          <Style TargetType="{x:Type GroupItem}">
                              <Setter Property="Template">
                                  <Setter.Value>
                                      <ControlTemplate TargetType="GroupItem">
                                          <StackPanel Orientation="Horizontal">
                                              <ContentPresenter Margin="0,0,0,0" VerticalAlignment="Center" />
                                              <ItemsPresenter Margin="0,0,0,0" VerticalAlignment="Center"/>
                                          </StackPanel>
                                      </ControlTemplate>
                                  </Setter.Value>
                              </Setter>
                          </Style>
                      </GroupStyle.ContainerStyle>
                  </GroupStyle>
              </ListView.GroupStyle>
              <ListView.ItemsPanel>
                  <ItemsPanelTemplate>
                      <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
                  </ItemsPanelTemplate>
              </ListView.ItemsPanel>
              <ListView.ItemTemplate>
                  <DataTemplate>
                      <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" >
                          <Label VerticalAlignment="Center"  Margin="0" Content="{Binding Hours}" />
                          <Label Name="lblWorkingHours" VerticalAlignment="Center"  Margin="0,0,0,0" Content="{Binding WorkingHoursType, Converter={StaticResource ResourceKey=hoursTypeConverter}}" />
                      </StackPanel>
                  </DataTemplate>
              </ListView.ItemTemplate>
      
          </ListView>
      

      【讨论】:

        【解决方案4】:
            <ListBox Height="50" VerticalAlignment="Top">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBoxItem Content="aaaaaaaaaaa"/>
                <ListBoxItem Content="aaaaaaaaaaa"/>
                <ListBoxItem Content="aaaaaaaaaaa"/>
                <ListBoxItem Content="aaaaaaaaaaa"/>
                <ListBoxItem Content="aaaaaaaaaaa"/>
            </ListBox>
        

        【讨论】:

          猜你喜欢
          • 2010-11-05
          • 2014-07-20
          • 1970-01-01
          • 2015-12-29
          • 1970-01-01
          • 1970-01-01
          • 2019-06-20
          • 2012-07-05
          • 2010-09-26
          相关资源
          最近更新 更多