代码之家  ›  专栏  ›  技术社区  ›  MajorRefactoring

在ViewBox中拉伸WPF ListView中的项

  •  17
  • MajorRefactoring  · 技术社区  · 14 年前

    我有一个令人沮丧的问题,我将非常感谢一些帮助。我在ViewBox中有一个ListView,无法使ListView中的项目水平拉伸。

    XAML公司 :

    <Window x:Class="WpfApplication3.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication3"
            Title="Window1">
        <Window.Resources>
            <local:Inning x:Key="inning">
                <local:Inning.Skins>
                    <local:Skin SkinNumber="1"></local:Skin>
                    <local:Skin SkinNumber="2"></local:Skin>
                    <local:Skin SkinNumber="3"></local:Skin>
                </local:Inning.Skins>
            </local:Inning>
        </Window.Resources>
        <Grid DataContext="{StaticResource inning}">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
            </Grid.RowDefinitions>
            <TextBlock Background="Black"
                       Text="SKINS"
                       Foreground="White"
                       FontSize="80"
                       FontWeight="Bold"
                       HorizontalAlignment="Center"></TextBlock>
            <Grid Margin="2"
                  Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Viewbox>
                    <ListView Name="lvSkinNumbers"
                              ItemsSource="{Binding Skins}"
                              HorizontalAlignment="Stretch"
                              Background="Black"
                              VerticalAlignment="Stretch"
                              VerticalContentAlignment="Stretch">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock FontSize="250"
                                           VerticalAlignment="Stretch"
                                           LineStackingStrategy="BlockLineHeight"
                                           Margin="2"
                                           TextAlignment="Center"
                                           HorizontalAlignment="Stretch"
                                           Background="Black"
                                           Foreground="White"
                                           Text="{Binding SkinNumber}"></TextBlock>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Viewbox>
                <Viewbox Grid.Column="1">
                    <ListView Name="lvFirstInningSkins"
                              ItemsSource="{Binding Skins}"
                              Grid.Column="1"
                              HorizontalContentAlignment="Stretch"
                              Background="Black">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock FontSize="250"
                                           VerticalAlignment="Stretch"
                                           LineStackingStrategy="BlockLineHeight"
                                           Margin="2"
                                           TextAlignment="Center"
                                           HorizontalAlignment="Stretch"
                                           Background="Green"
                                           Foreground="White"
                                           Text="{Binding SkinNumber}"></TextBlock>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Viewbox>
                <Viewbox Grid.Column="2"
                         HorizontalAlignment="Stretch">
                    <ListView Name="lvSecondInningSkins"
                              ItemsSource="{Binding Skins}"
                              Grid.Column="2"
                              HorizontalAlignment="Stretch"
                              Background="Black">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock FontSize="250"
                                           VerticalAlignment="Stretch"
                                           LineStackingStrategy="BlockLineHeight"
                                           Margin="2"
                                           TextAlignment="Center"
                                           HorizontalAlignment="Stretch"
                                           Background="Green"
                                           Foreground="White"
                                           Text="{Binding SkinNumber}"></TextBlock>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Viewbox>
            </Grid>
        </Grid>
    </Window>
    

    using System;
    using System.Windows;
    using System.ComponentModel;
    using System.Collections.ObjectModel;
    
    namespace WpfApplication3
    {
    
     public class Inning
     {
      private ObservableCollection<Skin> _skins = new ObservableCollection<Skin>();
      public ObservableCollection<Skin> Skins
      {
       get { return _skins; }
       set { _skins = value; }
      }
     }
    
     public class Skin : INotifyPropertyChanged
     {
      public Skin()
      {
      }
    
      public Skin( int skinNumber, Inning inning )
      {
       this.SkinNumber = skinNumber;
       this.Inning = inning;
      }
    
      public Inning Inning { get; set; }
      public int SkinNumber { get; set; }
    
      public int SkinCount
      {
       get { return this.Inning.Skins.Count; }
      }
    
      public void Notify( string propertyName )
      {
       if ( PropertyChanged != null )
        PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
      }
    
      public event PropertyChangedEventHandler PropertyChanged;
    
     }
    
    
     public partial class Window1 : Window
     {
    
      public Window1()
      {
       InitializeComponent();
      }
    
    
     }
    }
    

    http://i52.tinypic.com/244wqpl.jpg

    我试过各种各样的 HorzontalAlignment="Stretch" HorizontalContentAlignment="Stretch" 并尝试修改ItemsPanel模板,但我一辈子都搞不懂如何让ListView水平扩展。如果没有一些代码来动态改变ListView的宽度,我要做的是不可能的吗?还是我错过了一些很简单的东西?

    谢谢,

    2 回复  |  直到 9 年前
        1
  •  61
  •   ASanch    14 年前

    请尝试将ListView的ItemContainerStyle设置为如下所示:

    <ListView>
      <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
      </ListView.ItemContainerStyle>
    </ListView>
    

    您可能还需要设置 <Viewbox Stretch="Fill"/> .

        2
  •  6
  •   fanadd    9 年前

    意外设置 ScrollViewer.HorizontalScrollBarVisibility="Disabled" 也为我工作:

    <ListView ItemsSource="{Binding SourceList}"
        ScrollViewer.HorizontalScrollBarVisibility="Disabled">