我有一个列表视图,其中显示了一些日志(LogItem类型)。 ListView.View在XAML中设置为GridView。 GridView有两列,其中每一列的数据模板都设置为文本框。第一列绑定到LogItem的DateTime属性,因此可以将第一列的宽度设置为“自动(首选)”或我需要的固定宽度。
第二个gridview列绑定到日志消息字符串,因此它可以具有任何宽度。
我的问题是,如果日志消息的宽度大于列表视图的宽度,并且所有文本都是可见的,那么如何确保所有文本在列表视图中都是可见的,以便在列表视图中显示滚动条?
目前,第二列的大小似乎由添加到ListView绑定到的集合的第一项设置的,因此宽度永远不会更新。因此,通常情况下,我只会看到一小部分日志消息,而第二列标题甚至没有覆盖完整的ListView宽度。
我到处寻找问题的解决方案。似乎有更多的人问同样的问题,但是到目前为止,我发现的答案都没有解决问题。我希望有人可以帮助我正确地引导我,而我错过了什么。
下面的XAML代码
<ListView Grid.Row="1"
HorizontalAlignment="Stretch"
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding LogItems}"
x:Name="LogListView"
FontSize="14">
<!--:GridViewColumnResize.Enabled="True" -->
<ListView.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Gray" Offset="1"/>
<GradientStop Color="White"/>
</LinearGradientBrush>
</ListView.Background>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Background" Value="{Binding BackColor}"/>
<Setter Property="TextElement.Foreground" Value="White"/>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Gold" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="TextElement.Foreground" Value="Black"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="true" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Gold" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="TextElement.Foreground" Value="Black"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="{Binding TimeText}" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="TimeLabel" Text="{Binding CreationTime, StringFormat='{}{0:hh:mm:ss.fff}'}" Grid.Column="0"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{Binding MessageText}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Message}" Grid.Column="1"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
编辑: 完整的XAML代码 pastebin.com/24HgAcML