2014-09-01 41 views
5

我知道columndefinition是如何在XAML中工作的,但我想做的事情並不知道如何。XAML Columndefinitions width *不能佔用空間

我想4列這樣的:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="110" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="80" /> 
    <ColumnDefinition Width="80" /> 
</Grid.ColumnDefinitions> 
  1. 列具有固定寬度
  2. 列必須採取一切可用的空間(是的,它是列之間,這正是問題)
  3. 列有固定寬度
  4. 列有固定寬度

第二列包含文本,問題是當文本太短時,第二列不會佔用所有可用空間。它自動變小,每行都變小。我可以把它與此代碼的文本塊的工作:

MinWidth="2000" 

但是這不是好辦法,因爲這個數字可能太低時,屏幕大。

這裏包含4列全的ListView:

<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="110" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="80" /> 
        <ColumnDefinition Width="80" /> 
       </Grid.ColumnDefinitions> 
       <Image Height="110" Width="110" Grid.Column="0" Source="{Binding blabla}" HorizontalAlignment="Stretch" /> 
       <TextBlock Text="{Binding blabla}" TextWrapping="Wrap" Margin="5,0,0,0" Grid.Column="1" FontSize="16" HorizontalAlignment="Stretch" TextAlignment="Left" FlowDirection="LeftToRight" MinWidth="2000" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontStretch="UltraCondensed"/> 
       <TextBlock Grid.Column="2" TextWrapping="Wrap" Foreground="Black" Margin="5,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Center"/> 
       <Image Source="{Binding blabla, Converter={StaticResource ImgConverter}}" Grid.Column="3" Width="76" Height="76" HorizontalAlignment="Center" Stretch="None" VerticalAlignment="Center" Margin="0"/> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

其實檢查你的父母控制寬度。這將不會被設置爲您預期的全寬度。 – loop 2014-09-01 20:47:39

+0

你是什麼意思?什麼家長控制? – XHotSniperX 2014-09-01 20:57:38

+0

抱歉不能清楚地表達出來。但是,你能否調查一下Grid在Grid中的佔用面積。 – loop 2014-09-01 21:00:12

回答

8

您的佈局是明確的,但錯過了,是造成了一個ListViewItem的內容保證金到左邊,因爲這是一個很小的事情在爲ListView控件命名爲「ItemContainerStyle」的默認ListViewItemStyle中定義。

所有你需要做的是添加此ListViewItemStyle,我已經修改了水平和垂直拉伸的內容在所有可用空間,爲項目的資源

<Style x:Key="StretchedListViewItemStyle" 
      TargetType="ListViewItem"> 
     <Setter Property="HorizontalContentAlignment" 
       Value="Stretch" /> 
     <Setter Property="VerticalContentAlignment" 
       Value="Stretch" /> 
</Style> 

然後將其設置爲ItemContainerStyle對於ListView如下:

<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" ItemContainerStyle="{StaticResource StretchedListViewItemStyle}"/> 
+0

哇你找到它了!不知道那個listview是那樣的風格。非常感謝你! – XHotSniperX 2014-09-02 16:46:16

+0

不客氣:) – 2014-09-02 22:00:31