2011-07-07 44 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。 –