WPF : Extend last column of ListView's GridView

前端 未结 7 618
北海茫月
北海茫月 2020-11-28 06:50

I have a ListView with a GridView with 3 columns. I want last column to take up remaining width of the ListView.

相关标签:
7条回答
  • 2020-11-28 07:33

    I haven't seen a one-line/simple XAML only solution. Set a width that's appropriate for the design view, and then modify the width on window size change like this:

    Private Sub winMain_SizeChanged(sender As Object, e As SizeChangedEventArgs) Handles Me.SizeChanged
        TryCast(lvwDownload.View, GridView).Columns(3).Width = lvwDownload.ActualWidth - 340
    End Sub
    

    NOTE: This logic does not change/hover the width of a column when another is resized. It's great for filling a listview with the last column.

    0 讨论(0)
  • 2020-11-28 07:38

    How About Using a Style

    <Style x:Key="GridViewExtraStyle" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Background" Value="{x:Null}"/>
        <Setter Property="Foreground" Value="{x:Null}"/>
        <Setter Property="BorderBrush" Value="{x:Null}"/>
        <Setter Property="Width" Value="1000"/>
    </Style>
    
    <ListView>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Abc"/>
                <GridViewColumn Header="" HeaderContainerStyle="{DynamicResource GridViewExtraStyle}"/>
            </GridView>
        </ListView.View>
    </ListView>
    
    0 讨论(0)
  • 2020-11-28 07:42

    You cannot be remove last column but you can be doin little illusion.

                <ControlTemplate TargetType="GridViewColumnHeader">
                    <Grid>
                        <ContentPresenter x:Name="HeaderContent"
                                              Content="{TemplateBinding Content}" ... />
                        <Thumb x:Name="PART_HeaderGripper" ... />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="HasContent"
                                 Value="false">
                            <Setter Property="Visibility"
                                    Value="Collapsed"
                                    TargetName="PART_HeaderGripper" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
    
    0 讨论(0)
  • 2020-11-28 07:43

    quick & dirty

    xaml:

    <ListView SizeChanged="ListView_SizeChanged" Loaded="ListView_Loaded" >
        <ListView.View>
            <GridView>
                <GridViewColumn Header="col1" Width="100" />
                <GridViewColumn Header="col1" Width="Auto" />
                <GridViewColumn Header="col1" />
            </GridView>
        </ListView.View>
    </ListView>
    

    cs:

    private void ListView_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        UpdateColumnsWidth(sender as ListView);
    }
    
    private void ListView_Loaded(object sender, RoutedEventArgs e)
    {
        UpdateColumnsWidth(sender as ListView);
    }
    
    private void UpdateColumnsWidth(ListView listView)
    {
        int autoFillColumnIndex = (listView.View as GridView).Columns.Count - 1;
        if (listView.ActualWidth == Double.NaN)
            listView.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
        double remainingSpace = listView.ActualWidth;
        for (int i = 0; i < (listView.View as GridView).Columns.Count; i++)
            if (i != autoFillColumnIndex)
                remainingSpace -= (listView.View as GridView).Columns[i].ActualWidth;
        (listView.View as GridView).Columns[autoFillColumnIndex].Width = remainingSpace >= 0 ? remainingSpace : 0;
    }
    
    0 讨论(0)
  • 2020-11-28 07:46

    That can't be done with simple XAML, but there are some solutions out there. Check this out:

    • ListView Layout Manager
    • Star size of a ListView column
    0 讨论(0)
  • 2020-11-28 07:50

    There is a way to do it using behavior pattern

    <ListView HorizontalAlignment="Stretch"
              Behaviours:GridViewColumnResize.Enabled="True">
            <ListViewItem></ListViewItem>
            <ListView.View>
                <GridView>
                    <GridViewColumn  Header="Column *"
                                       Behaviours:GridViewColumnResize.Width="*" >
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox HorizontalAlignment="Stretch" Text="Example1" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
    

    See the following link for some examples and link to read more http://lazycowprojects.tumblr.com/post/7063214400/wpf-c-listview-column-width-auto

    And to see the source code. Check out https://github.com/rolfwessels/lazycowprojects/tree/master/Wpf

    0 讨论(0)
提交回复
热议问题