未在ListView中设置GridViewColumn和标头

时间:2018-10-22 13:49:48

标签: wpf listview gridview

我有一个列表视图,其中显示了一些日志(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

0 个答案:

没有答案