2010-09-15 16 views
15

我有一個令人沮喪的問題,我非常感謝一些幫助。我有一個ViewBox內的ListView,我不能讓ListView內的項目水平拉伸。拉伸ViewBox中的WPF 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(); 
    } 


} 
} 

可以發生在一局皮膚的數目可以改變,並且可以被用戶改變,所以我將ListView放入了ViewBox中,以便在皮膚數量發生變化時自動調整大小。在出現的窗口可以在這裏看到:http://i52.tinypic.com/244wqpl.jpg

我已經試過各種HorzontalAlignment="Stretch"HorizontalContentAlignment="Stretch"組合,並試圖修改ItemsPanel模板,但我不是爲我的生活似乎可以找出如何讓ListView的水平拉伸。是什麼我試圖做不可能沒有一些代碼背後動態改變ListView的寬度?或者我錯過了一些非常簡單的事情?

任何人都可以提供的幫助,將不勝感激。

感謝,

馬修

回答

50

嘗試爲您的ListView設置ItemContainerStyle喜歡的東西:

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

您設置<Viewbox Stretch="Fill"/>可能還需要。

之後,我認爲你可以在代碼中刪除所有其他的「Horizo​​ntalAlignment = Stretch」和「Horizo​​ntalContentAlignment = Stretch」設置器,因爲它可能不再需要。

+1

'拉伸= 「填充」'!對此感激不盡。當視框拉伸並且ListViewItem.Horizo​​ntalContentAlignment設置爲Stretch時,它已接近。它給了這個:http://i55.tinypic.com/28cdmwh.jpg - 關閉,但文本被拉伸,而不是被拉伸的TextBlock。如果我還通過以下代碼將ListView的寬度設置爲ViewBox的ActualWidth:'Width =「{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type Viewbox}},Path = ActualWidth}」',正是我所追求的。這:http://i54.tinypic.com/2mo8qk5.jpg非常感謝你的幫助。 – MajorRefactoring 2010-09-15 19:01:51

+0

謝謝你。這也適用於我的列表框。 – MikeKulls 2012-01-03 00:40:26

+1

在Windows應用商店中沒有適用於我。它會導致對象,字體,高度和寬度的縮放轉換。然而,原來的答案確實按預期工作。 – 2013-11-04 20:24:37

5

不料設置ScrollViewer.HorizontalScrollBarVisibility="Disabled"也爲我工作:

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