2011-07-07 132 views
2

我在使用listviewitems將其大小設置爲網格第二列中的可用空間時遇到問題。我有一個ValidationItemError類可以有一個很長的描述。這是它的DataTemplate xaml。WPF ListViewItem寬度綁定不能按預期方式工作

<DataTemplate DataType="{x:Type Models:ValidationItemError}"> 
    <StackPanel> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="20"></ColumnDefinition> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <Ellipse Width="10" 
        Height="10" 
        Margin="5,0,0,0" 
        Fill="Crimson" /> 
      <TextBlock Text="{Binding ColumnName}" 
         Grid.Column="1" 
         FontWeight="Bold" /> 
     </Grid> 
     <TextBlock Text="{Binding Description}" 
        ToolTip="{Binding Description}" 
        Margin="20,0,0,0" 
        TextWrapping="Wrap" /> 
    </StackPanel> 
</DataTemplate> 

的validationItemErrors分爲另一個類ValidationLineItem這就是它的DataTemplate

<DataTemplate DataType="{x:Type Models:ValidationLineItem}"> 
    <StackPanel> 
     <Grid Margin="0,10,0,0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="35"></ColumnDefinition> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <TextBlock Text="Line" 
         FontSize="16" 
         FontWeight="Bold" /> 
      <TextBlock Text="{Binding LineNumber}" 
         Margin="5,0,0,0" 
         FontSize="16" 
         Grid.Column="1" /> 
     </Grid> 
     <ItemsControl ItemsSource="{Binding ValidationItems}"> 
     </ItemsControl> 
    </StackPanel> 
</DataTemplate> 

所以基本上我有一個validationLineItem存儲存儲在ValidationItems財產的行號和多ValidationItemError /警告。所以現在我只是將這些數據綁定到網格左列的列表視圖。

,除了這部分

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="Width" 
       Value="{Binding ElementName=GridCell, Path=Width}" /> 
    </Style> 
</ListView.ItemContainerStyle> 

的描述文本塊忽略寬度設置,不換行,就像我需要它來呈現所有罰款。 如果手動設置像

<Setter Property="Width" Value="100" /> 

代替

<Setter Property="Width" Value="{Binding ElementName=GridCell, Path=Width}" /> 

正文塊包裝,因爲我想描述的寬度。 任何人有任何想法?我相信我在這裏錯過了一些簡單的東西。

我應該注意到,我已經嘗試過,也沒有運氣。

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

不是一個真正的答案,所以我將其添加註釋。你有沒有嘗試將listviewitem的寬度綁定到網格而不是單元格?此外,如果你嘗試,使用ActualWidth而不是寬度。您還可以嘗試將Horizo​​ntalAlignment設置爲不拉伸Horizo​​ntalContentAlignment。如果這沒有幫助,我會建議使用Snoop來檢查哪個元素沒有按預期調整大小。 Snoop還允許您即時修改數值,您可以在其中進一步測試發生了什麼。 – dowhilefor

回答

4

你的問題是,ListView有一個內部的buildin ScrollViewer引起該問題。

在我看來,你只是想要內容包裝。所以溝ItemContainerStyle,這增加了ListView

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

這將禁用水平滾動條,讓您的內容包!

希望這會有所幫助!

出於完整性:

<ListView ItemsSource="{Binding ValidationItems}"       
       SelectedItem="{Binding SelectedValidationItem}"       
       SelectionChanged="ListViewSelectionChanged" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" /> 
+0

完美的工作,同時擺脫了6行xaml。 –