我在使用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>
不是一个真正的答案,所以我将其添加注释。你有没有尝试将listviewitem的宽度绑定到网格而不是单元格?此外,如果你尝试,使用ActualWidth而不是宽度。您还可以尝试将HorizontalAlignment设置为不拉伸HorizontalContentAlignment。如果这没有帮助,我会建议使用Snoop来检查哪个元素没有按预期调整大小。 Snoop还允许您即时修改数值,您可以在其中进一步测试发生了什么。 – dowhilefor