我遇到的问题是将listviewitems的大小调整为网格第二列中可用的空间。我有一个ValidationItemError类,可以有一个很长的描述。这是它的DataTemplate xaml。
<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 / Warnings。所以现在我只是将数据绑定到网格左栏的列表视图中。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75*" />
<ColumnDefinition Name="GridCell" Width="25*" />
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Column="1">
<ListView ItemsSource="{Binding ValidationItems}"
SelectedItem="{Binding SelectedValidationItem}"
SelectionChanged="ListViewSelectionChanged">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Width"
Value="{Binding ElementName=GridCell, Path=Width}" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
</ScrollViewer>
</Grid>
除了这部分
之外,所有渲染都很好<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 :(得分:4)
您的问题是ListView
内部构建ScrollViewer
会导致问题。
在我看来,你只想要内容包装。请放弃ItemContainerStyle
并将其添加到ListView
:
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
这将禁用水平滚动条并使您的内容换行!
希望这有帮助!
为了完整性:
<ListView ItemsSource="{Binding ValidationItems}"
SelectedItem="{Binding SelectedValidationItem}"
SelectionChanged="ListViewSelectionChanged"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" />